3

プロジェクトでエラーが発生した後、C++ を使用して Xcode (4.2) で小さなテスト プログラムを実行しようとしていました。

#include <boost/thread.hpp>
#include <boost/bind.hpp>    

int main (int argc, const char * argv[])
{
    boost::thread_group tg;
    return 0;
}

しかし、プログラム全体がビルドに失敗し、エラーが出力されます:

Undefined symbols for architecture x86_64:
  "boost::thread::~thread()", referenced from:
      boost::thread_group::~thread_group()in main.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

それから私は使ってみました

thread_group * tg = new thread_group();

私が呼び出そうとするまで、問題なくコンパイルされます

tg->join_all();

コンパイラは次のようなエラーを出力します。

Undefined symbols for architecture x86_64:
  "boost::detail::get_current_thread_data()", referenced from:
      boost::detail::interruption_checker::interruption_checker(_opaque_pthread_mutex_t*, _opaque_pthread_cond_t*)in main.o
  "boost::this_thread::interruption_point()", referenced from:
      boost::condition_variable::wait(boost::unique_lock<boost::mutex>&) in main.o
  "boost::this_thread::disable_interruption::disable_interruption()", referenced from:
      boost::shared_mutex::lock_shared()      in main.o
  "boost::this_thread::disable_interruption::~disable_interruption()", referenced from:
      boost::shared_mutex::lock_shared()      in main.o
  "boost::thread::join()", referenced from:
      boost::thread_group::join_all()     in main.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

これらの問題を解決する方法を知っている人はいますか? BOOST_FOREACH などの他の関数を問題なく使用しています。しかし、スレッドを使用しようとすると、これらに遭遇します。

する必要がありますか:

  • 「その他のリンカー フラグ」でフラグを指定しますか?
  • ブーストまたは何らかの並べ替えを再インストールしますか?現在、自作を使用してインストールされたBoost 1.49.0を使用しています(つまり、sudo brew install boost)

または、含める必要がある他の特定の構成はありますか?

4

1 に答える 1

4

ブースト スレッド ライブラリには、リンクする必要がある実際のライブラリ オブジェクト (-lboost_threadまたは場合によっては-lboost_thread-mt) があります。

于 2012-07-23T17:04:22.403 に答える