3

OSX Mountain Lion を使用しています。ブースト Web サイト ( http://www.boost.org/doc/libs/1_52_0/more/getting_started/unix-variants.html ) から提供された手順を使用して、ブースト 1.52.0 をダウンロードし、解凍し、ビルドしました。デフォルトのインストール プレフィックスを のままにしました。/usr/localこれは、ライブラリが にインストールされ/usr/local/lib、ヘッダー ファイルが にあることを意味します/usr/local/include。ライブラリとヘッダーがそこに存在し、最近変更されたことを確認しました。

ここにあるブースト非同期 I/O の例をコンパイルしようとしています: http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/tutorial/tuttimer5/src.html (ソース)。

これが私のコンパイルコマンドです:

g++ -Wall -c -g -I/usr/local/include src/test1.cpp -o src/test1.o

ここで、src/test1.cpp はサンプル ソース ファイルです。これが私のリンクコマンド(およびエラー)です:

g++ -Wall -L/usr/local/lib -lboost_thread -lboost_system  src/test1.o -o bin/test1
Undefined symbols for architecture x86_64:
  "boost::thread::~thread()", referenced from:
      _main in test1.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

Apple の clang++ 4.0 と g++ 4.6.0 の両方を使用してみました。両方のプログラムから同じ未定義シンボル エラーが発生します。

他の人も、このコード サンプルのコンパイルに問題を抱えているようです。私はこの質問を認識しています: C++ / Boost: Undefined Symbols in example? そしてこれ:boost.asioの例をコンパイルするときのリンカエラー。ただし、これらの問題はそれぞれ、適切なスイッチ (-lboost_thread および -lboost_system) をコマンド ラインに追加することで修正されたようです。私はすでにそれらを持っています。-lpthread を追加しようとしましたが、うまくいきませんでした。

私の質問を見てくれてありがとう!どんな助けでも大歓迎です。:)

4

2 に答える 2

0

これと同じ問題が発生したところ、Boost1.49に戻すと問題が解決することがわかりました。Boost1.49のダウンロードリンクは次のとおりです。

http://www.boost.org/users/history/version_1_49_0.html

1.49をインストールする前に、とを削除して1.52を削除/usr/local/include/boost/usr/local/lib/*boost*ました。この問題を引き起こすために1.49と1.52の間で何が変わったか、またはBoost1.50または1.51が機能するかどうかはわかりません。

于 2013-01-02T19:17:06.443 に答える
0

リンクするライブラリは、コマンド ラインの最後に配置します。

GNU リンカは一種の依存関係の逆ルックアップを使用するため、ファイル A がライブラリ B に依存している場合、B はコマンド ラインで A の後に来る必要があります。

于 2012-12-12T07:01:01.807 に答える