web-dev-qa-db-ja.com

ブーストスレッドエラー:未定義の参照

#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()'

このエラーが発生する理由を誰かに教えてもらえますか?

23
lal

mtタグでコンパイル、つまり-lboost_thread-mt

37
ankita

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

-lpthread -lboost_thread ...

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

19
AlaskaJoslin

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

18
gregg

Centos 6.5でpovray 3.7をコンパイルするときに同様の問題が発生し、これで解決しました。Makefile-lboost_thread-mtを追加するだけです。

2
Janos Erzinger

同じエラーが発生しました。 -lboost_threadでコンパイルして修正しました

0
Carlosio

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

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

greggの答えは正しいです!

0
Kevin Zhao