0

ブーストスレッドを使用したマルチスレッドを始めたばかりです。スレッド ライブラリへのリンク中に失敗する Hello World タイプのプログラムがあります。以下は、ターミナル ウィンドウの出力です。

 g++ -Wall -I/usr/include HelloWorld.cpp -L/usr/local/lib -pthread -lboost_thread -lrt -lboost_system
/tmp/ccTKHnfd.o: In function `main':
HelloWorld.cpp:(.text+0x4a): undefined reference to `boost::thread::join()'
HelloWorld.cpp:(.text+0x5b): undefined reference to `boost::thread::~thread()'
HelloWorld.cpp:(.text+0x70): undefined reference to `boost::thread::~thread()'
/tmp/ccTKHnfd.o: In function `boost::thread::thread<void (*)()>(void (*)(), boost::disable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*)()> >, boost::thread::dummy*>::type)':
HelloWorld.cpp: (.text._ZN5boost6threadC2IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE[_ZN5boost6threadC5IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE]+0x23): undefined reference to `boost::thread::start_thread()'
collect2: ld returned 1 exit status

aptitude を使用してブースト開発ライブラリ 1.48 をインストールしましたが、コンパイラに適切なフラグをすべて使用していると思います。私は何が欠けていますか?私の gcc は 4.6.3 です。よろしくお願いいたします。

4

2 に答える 2

0

libboost_thread.so または libboost_thread.a が見つからないようです。/usr/local/lib には実際に何がありますか? できるよ

ls /usr/local/lib | grep thread. libboost_thread.so または libboost_thread.a が表示されない場合は、未定義の参照がある理由が説明されています。これらの関数を実装するオブジェクトは実際には存在しません。

さらに、libboost_thread.so が表示されず、libboost_thread.so.3.6 または何か (特定のバージョンを示す) が表示される場合は、次の 2 つのいずれかを行うことができます: 直接リンクするか、シンボリック リンクを作成します (すなわちsudo ln -s /usr/local/lib/libboost_thread.so.3.6 /usr/local/lib/libboost_thread.so

于 2013-03-29T22:55:52.370 に答える
0

おそらく、lib フラグに「-mt」サフィックスを追加する必要があります。例: -lboost_thread-mt ブースト ライブラリ パスを再確認できます。

于 2013-02-27T00:45:06.280 に答える