2009-12-12 2 views
2

Я использую Ubuntu + Eclipse и установленный boost (не совсем корректный). Я установил Boost с помощью apt-get install libboost *Компиляция boost :: thread with Eclipse

Я проверил несколько простых кодов, кажется, что форсирование работает правильно.

Однако, когда я пытаюсь изучить часть потока, приведенный ниже код не работает.

#include <boost/thread/thread.hpp> 
#include <iostream> 
using namespace std; 

void hello() 
{ 
    cout<<"hello!"<<endl; 
} 

int main() 
{ 
    boost::thread thrd(&hello); 
    cout<<"Just a test!"<<endl; 
} 

Информация об ошибке следующая, есть 4 ошибки.

Severity and Description Path Resource Location Creation Time Id 
/usr/local/include/boost/thread/detail/thread.hpp undefined reference to `boost::detail::thread_data_base::~thread_data_base()' FirstCppProject line 40 1260656497961 200 


Severity and Description Path Resource Location Creation Time Id 
/usr/local/include/boost/thread/detail/thread.hpp undefined reference to `boost::thread::start_thread()' FirstCppProject line 191 1260656497967 202 


Severity and Description Path Resource Location Creation Time Id 
/usr/local/include/boost/thread/pthread/thread_data.hpp undefined reference to `vtable for boost::detail::thread_data_base' FirstCppProject line 65 1260656497965 201 


Severity and Description Path Resource Location Creation Time Id 
undefined reference to `boost::thread::~thread()' FirstCppProject test.cpp line 15 1260656497959 199 

Пожалуйста, простите меня, если мой вопрос слишком наивен. Пожалуйста, предложите любую информацию, которая, по вашему мнению, может мне помочь.

ответ

4

вы должны связать с библиотекой потоков libboost_thread _...

+0

спасибо за ваш быстрый комментарий. Это проблема с Eclipse? Итак, как это сделать в Eclipse? Я подумал, что когда я установил boost на Ubuntu, мне нечего делать с Eclipse. – skydoor

+0

Нет, это не проблема затмения, вам нужно указать опцию для компоновщика (проверьте параметры проекта), что-то вроде -lboost_thread-gcc-4.3 или подобное, вам придется сначала найти библиотеку, чтобы выяснить его имя, скорее всего, вам придется связать и с pthread. – user229321

+0

Вам придется ссылаться на pthread. Я должен был сделать это раньше. – KitsuneYMG

1

С Boost, иногда вам просто нужно сказать, чтобы ссылка, где библиотеки и он будет выяснить, какой из них связать против.

+1

автосвязь не работает в g ​​++, это визуальная функция C++, поэтому она недоступна в * nix – user229321

1

Чтобы добавить Linker-> 1.Правой нажмите на проект 2.Select на окне свойств 3.Click на C/C++ построить 4. выбрать настройки 5. и выбрать библиотеки 6. то вы можете добавить линкеры: boost_thread и boost_system и т. д.