2013-02-20 2 views
0

Просто начать с многопоточности с использованием потоков boost; У меня есть программа типа Hello World, которая не работает при связывании с библиотекой потоков. Ниже находится терминал вывод окна:C++ ссылка не удалась с неопределенной ссылкой на libboost_thread

g++ -Wall -I/usr/include HelloWorld.cpp -L/usr/local/lib -pthread -lboost_thread -lrt -lboost_system 
/tmp/ccTKHnfd.o: In function `main': 
HelloWorld.cpp:(.text+0x4a): undefined reference to `boost::thread::join()' 
HelloWorld.cpp:(.text+0x5b): undefined reference to `boost::thread::~thread()' 
HelloWorld.cpp:(.text+0x70): undefined reference to `boost::thread::~thread()' 
/tmp/ccTKHnfd.o: In function `boost::thread::thread<void (*)()>(void (*)(), boost::disable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*)()> >, boost::thread::dummy*>::type)': 
HelloWorld.cpp: (.text._ZN5boost6threadC2IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE[_ZN5boost6threadC5IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE]+0x23): undefined reference to `boost::thread::start_thread()' 
collect2: ld returned 1 exit status 

Я установил Повышение Dev библиотеки 1,48, используя способности и верить я использую все правильные флаги для компилятора. Что мне не хватает? Мой gcc - 4.6.3. Заранее благодарим за вашу помощь

+2

Если библиотека не найдена, может быть только две причины: 1) Отсутствует путь к библиотеке; 2) Неверное имя библиотеки. Проверьте оба, и вы добьетесь успеха. Действительно ли boost_thread существует в/usr/local/lib? –

ответ

0

Возможно, вам нужно добавить суффикс -mt к флагам lib: например. -lboost_thread-mt Вы можете дважды проверить свой путь к библиотеке boost.

0

Похоже, вы не можете найти libboost_thread.so или libboost_thread.a. Что на самом деле есть в вашем/usr/local/lib? Вы можете сделать:

ls /usr/local/lib | grep thread. Если вы не видите libboost_thread.so или libboost_thread.a, то это объясняет, почему у вас неопределенная ссылка - объект, реализующий эти функции, на самом деле отсутствует.

Кроме того, если вы не видите libboost_thread.so, но вы видите libboost_thread.so.3.6 или что-то (что обозначает конкретную версию), то вы можете сделать одну из двух вещей: либо ссылку на нее напрямую, либо создать символическая ссылка (то есть sudo ln -s /usr/local/lib/libboost_thread.so.3.6 /usr/local/lib/libboost_thread.so)

Смежные вопросы