使用提升库时出错

Error when I am using boost library

本文关键字:出错      更新时间:2023-10-16

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

我在 Linux mint 中使用以下命令安装 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

我能做什么?

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

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

有关此内容的更多信息,请参阅文档的"使用和构建库"部分:

Boost.Thread 依赖于一些非仅标头库。

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

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

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

我建议阅读什么是库以及如何将它们链接到您的程序中。