Visual Studio 2017 Linux не может скомпилироваться, если есть std :: thread - PullRequest
0 голосов
/ 31 октября 2018

Поэтому я пытаюсь использовать Visual Studio 2017 для создания проекта Linux. Я начал с пустого проекта Linux (как шаблон проекта), и пока все в порядке.

Однако, если у меня есть

// Create a new thread for the connection to avoid clutter
std::thread newConnectionHandler(connectionHandler, iNewConnection);
newConnectionHandler.detach();

в моем коде, он не скомпилируется. Вот ошибки, которые я получаю:

Error       E0020   identifier "__float128" is undefined
Error       In function `std::thread::thread<void(&)(int), int&>(void(&)(int), int&)':
Error       undefined reference to `pthread_create'
Error       ld returned 1 exit status

Но как только я комментирую материал std::thread, он компилируется.

Вот что я пробовал до сих пор:

  • C / C ++ -> Дополнительные параметры -> Добавлено -pthread -lpthread или просто -pthread
  • Linker -> Дополнительные параметры -> Добавлено -pthread -lpthread или просто -pthread
  • Компоновщик -> Зависимости библиотеки -> Добавлено thread
  • Переключение стандарта языка C ++ между C ++ 17 и C ++ 11

И, конечно, я пробовал несколько вариантов этих изменений, но всегда получаю одну и ту же ошибку.

И мои включения:

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <thread>

EDIT: Вот также объявление connectionHandler:

void connectionHandler(int iConnection)

А при прохождении iNewConnection тип данных равен int.

1 Ответ

0 голосов
/ 31 октября 2018

Установите параметр -pthread на Linker -> Command Line -> Additional Options, он также должен быть последним в командной строке ссылки после всех ваших файлов объектов и библиотек.

Порядок важен.

...