25
#include <boost/thread/thread.hpp>
#include <iostream>

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

int main(int argc, char* argv[])
{
  boost::thread thrd(&hello);
  thrd.join();
  return 0;
}

このプログラムをコンパイルしようとしたところ、次のエラーが発生しました。

/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to
   `boost::thread_resource_error::thread_resource_error()'
/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to 
   `boost::thread_resource_error::~thread_resource_error()'
/usr/include/boost/thread/pthread/mutex.hpp:40: undefined reference to 
   `typeinfo for boost::thread_resource_error'
./src/thread.o: In function `condition_variable':
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33: 
  undefined reference to `boost::thread_resource_error::thread_resource_error()'
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33: 
  undefined reference to `boost::thread_resource_error::~thread_resource_error()'
/usr/include/boost/thread/pthread/condition_variable_fwd.hpp:33: \
  undefined reference to `typeinfo for boost::thread_resource_error'
./src/thread.o: In function `thread_data_base':
/usr/include/boost/thread/pthread/thread_data.hpp:54: 
  undefined reference to `vtable for boost::detail::thread_data_base'
./src/thread.o: In function `thread<void (*)()>':
/usr/include/boost/thread/detail/thread.hpp:188: 
  undefined reference to `boost::thread::start_thread()'
./src/thread.o: In function `~thread_data':
/usr/include/boost/thread/detail/thread.hpp:40: 
  undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/usr/include/boost/thread/detail/thread.hpp:40: undefined reference to 
  `boost::detail::thread_data_base::~thread_data_base()'

なぜこのエラーが発生するのか教えてもらえますか?

4

7 に答える 7

38

mtタグでコンパイル-lboost_thread-mt

于 2012-05-07T09:46:37.333 に答える
24

同じ質問がありましたが、-lboost_thread-mt は非推奨になりました askubuntu.com でこの回答を参照してください。代わりに、makefile に必要なもの (少なくとも Linux の場合) は次のとおりです。

-lpthread -lboost_thread ...

Boost は単に、システムのスレッド ライブラリにリンクする責任をあなたに与えただけです。

于 2016-02-11T16:54:28.787 に答える
19

多くのブースト ライブラリは、ヘッダー ファイルに完全に実装されています。Boost.thread はそうではありません。ブーストスレッドライブラリでリンクしていないようです。リンカーの検索パスを確認してください。または、OP に関する Stargazer712 のコメントにあるように、インストールを確認してください。lib ディレクトリに libboost_thread-gcc-xxx-1_nn.o のようなものが表示されるはずです。その場合は、リンク ステップで明示的に参照してみてください ( のようなもの-L<path_to_lib> -lboost-thread-gcc-xx-1_nn)。そうでない場合は、明らかに完全なインストールがありません。

于 2010-08-27T13:25:16.917 に答える
2

povray 3.7をコンパイルするときにcentos 6.5で同様の問題が発生しましたが、これで解決しまし-lboost_thread-mtMakefile..

于 2015-01-19T16:16:47.630 に答える
0

コンパイルオプションを追加

-L<path_to_lib> -lboost-thread-gcc-xx-1_nn

グレッグの答えは正しいです!

于 2011-10-13T07:07:14.573 に答える