LINUX.ORG.RU

Ошибка undefined reference to `pthread_create'. Как исправить?

 , , , ,


1

3

В KDevelop не получается собрать программу с потоком.

В программе подключен модуль

#include <thread>

Потом вызывается поток

thread mythr(myfunc2);

При попытке собрать получается такая ошибка:
/home/evg/projects/myprog2/build> make -j1 -lpthread
-- Configuring done
-- Generating done
-- Build files have been written to: /home/evg/projects/myprog2/build
[ 50%] Linking CXX executable myprog2
CMakeFiles/myprog2.dir/main.cpp.o: In function `std::thread::thread(void (&)())':
/usr/include/c++/7/thread:122: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/myprog2.dir/build.make:95: myprog2] Error 1
make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/myprog2.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
*** Ошибка: Код выхода: 2 ***

Как исправить? Как подключить модуль thread?

make -j1 -lpthread

Кто так собирает

Harald ★★★★★ ()

либо в файл проекта добавь libpthread, либо в мейкфайл, либо

make LDFLAGS="-lpthread"

Harald ★★★★★ ()
Ответ на: комментарий от Harald

Где задать эту опцию? Я совсем начинающий. Это почти первая моя программа на C++ и под линуксом. До этого учился только в VS.Там сборка автоматизирована.

eugene8086 ()
Ответ на: комментарий от eugene8086

-lpthread - это опция компилятора, а не make

я не знаю, какую систему сборки использует KDevelop, но наверное там можно добавить сторонню библиотеку из GUI, мышкой

Harald ★★★★★ ()
Ответ на: комментарий от anonymous

Там же пишут что по posix надо -lphread.

anonymous ()
Ответ на: комментарий от anonymous

«Standards are paper. I use paper to wipe my butt every day. That's how much that paper is worth.»

anonymous ()

CMake:

find_package(Threads REQUIRED)
target_link_libraries(${CMAKE_PROJECT_NAME} Threads::Threads)

KennyMinigun ★★★★★ ()
Последнее исправление: KennyMinigun (всего исправлений: 1)

Тебе надо открыть файл CMakeLists.txt и убедиться, что там есть такие строчки:

find_package(Threads REQUIRED)
…
target_link_libraries(<имя твоего приложения> ${CMAKE_THREAD_LIBS_INIT})

XMs ★★★★★ ()
Ответ на: комментарий от KennyMinigun

Threads::Threads

Поменяли? Раньше надо было ${CMAKE_THREAD_LIBS_INIT}

XMs ★★★★★ ()
Ответ на: комментарий от KennyMinigun

Благодарю, перейду на такую форму, она гораздо приятнее на глаз

XMs ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.