我试图使用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
我能做什么?
答案 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
。
我建议您阅读有关哪些库以及如何将它们链接到您的程序中。