我使用boost库时出错

时间:2017-11-21 03:15:43

标签: c++ boost

我试图使用Boost库但我无法编译任何代码。

我在Linux mint中使用follow命令安装boost

$ sudo ./bootstrap.sh --prefix=/usr/local
$ sudo ./b2 install

这是我的程序,我从此网站https://en.wikibooks.org/wiki/C%2B%2B_Programming/Libraries/Boost

复制并粘贴
#include <boost/thread/thread.hpp>
#include <iostream>

using namespace std;

void hello_world() 
{
  cout << "Hello world, I'm a thread!" << endl;
}

int main(int argc, char* argv[]) 
{
  // start two new threads that calls the "hello_world" function
  boost::thread my_thread1(&hello_world);
  boost::thread my_thread2(&hello_world);

  // wait for both threads to finish
  my_thread1.join();
  my_thread2.join();

  return 0;
}

当您尝试编译它时,会发生此错误

$ g++ -Wall -Wextra -g cppc.cpp -o test
cppc.cpp:32:14: warning: unused parameter ‘argc’ [-Wunused-parameter]
 int main(int argc , char * argv[]){
              ^
cppc.cpp:32:33: warning: unused parameter ‘argv’ [-Wunused-parameter]
 int main(int argc , char * argv[]){
                                 ^
/tmp/ccOvZcci.o: En la función `__static_initialization_and_destruction_0(int, int)':
/usr/local/include/boost/system/error_code.hpp:206: referencia a `boost::system::generic_category()' sin definir
/usr/local/include/boost/system/error_code.hpp:208: referencia a `boost::system::generic_category()' sin definir
/usr/local/include/boost/system/error_code.hpp:210: referencia a `boost::system::system_category()' sin definir
/tmp/ccOvZcci.o: En la función `boost::thread_exception::thread_exception(int, char const*)':
/usr/local/include/boost/thread/exceptions.hpp:51: referencia a `boost::system::generic_category()' sin definir
/tmp/ccOvZcci.o: En la función `boost::detail::thread_data_base::thread_data_base()':
/usr/local/include/boost/thread/pthread/thread_data.hpp:152: referencia a `vtable for boost::detail::thread_data_base' sin definir
/tmp/ccOvZcci.o: En la función `boost::thread::start_thread()':
/usr/local/include/boost/thread/detail/thread.hpp:186: referencia a `boost::thread::start_thread_noexcept()' sin definir
/tmp/ccOvZcci.o: En la función `boost::thread::~thread()':
/usr/local/include/boost/thread/detail/thread.hpp:261: referencia a `boost::thread::detach()' sin definir
/tmp/ccOvZcci.o: En la función `boost::thread::get_id() const':
/usr/local/include/boost/thread/detail/thread.hpp:751: referencia a `boost::thread::native_handle()' sin definir
/tmp/ccOvZcci.o: En la función `boost::thread::join()':
/usr/local/include/boost/thread/detail/thread.hpp:777: referencia a `boost::thread::join_noexcept()' sin definir
/tmp/ccOvZcci.o: En la función `boost::detail::thread_data<void (*)()>::~thread_data()':
/usr/local/include/boost/thread/detail/thread.hpp:90: referencia a `boost::detail::thread_data_base::~thread_data_base()' sin definir
/tmp/ccOvZcci.o:(.rodata._ZTIN5boost6detail11thread_dataIPFvvEEE[_ZTIN5boost6detail11thread_dataIPFvvEEE]+0x10): referencia a `typeinfo for boost::detail::thread_data_base' sin definir
collect2: error: ld returned 1 exit stat

我能做什么?

2 个答案:

答案 0 :(得分:1)

这是链接器错误,而不是编译器错误。您必须与Boost库链接。

g++ -Wall -Wextra -g cppc.cpp -o test -lboost_thread -lboost_system

有关此内容的更多信息,请参阅documentation的“使用和构建库”部分:

  

Boost.Thread取决于一些非标头库。

     
      
  • Boost.System:此依赖项是必需的,您需要与库链接。
  •   
  • Boost.Chrono:此依赖项是可选的(请参阅下面的配置方法),如果您使用某些与时间相关的接口,则需要链接库。
  •   
  • Boost.DateTime:此依赖项是必需的,但即使Boost.DateTime是非标头库,Boost.Thread也只使用仅标题的部分,因此原则上您不需要链接库。
  •   

也许您想使用不需要链接第三方库的std::thread(C ++ 11)?

答案 1 :(得分:0)

你必须告诉你的编译器你的代码想要使用boost的一部分。添加标记-lboost_thread -pthread

我建议您阅读有关哪些库以及如何将它们链接到您的程序中。