1

私が取り組んでいるプロジェクトの Boost::Serialization ライブラリを試してみたかったのです。また、Linux でのプログラミングにも慣れようとしています。デフォルトの場所にブーストを設定しました。ここで提供されているテスト ファイルを、提供されているコマンド ライン引数を使用してコンパイルしてみましたが、問題なく動作しました。この例では、.a ファイルを使用しています。

次にシリアライゼーションのページに行き、シリアライゼーションのデモの 1 つを実行してみました。ファイル名を交換し、libboost_regex.a の代わりに libboost_serialization.a にリンクしたことを除いて、基本的に同じコマンドを実行しましたが、多くのエラーが発生しました。さまざまなオプションを試してディレクトリを再確認した後、.a を .so ファイルに置き換えることで、最終的に機能するようになりました。

参考までに、最終的に私にとってうまくいったのはこれでした:

g++ /usr/local/lib/libboost_serialization.so sertest.cpp -o sertest 

1 つの例では .a ファイルに対してリンクし、別の例では .so に対してリンクしなければならなかったのはなぜですか?

4

1 に答える 1

4

静的にリンクする場合、ライブラリとオブジェクト ファイルを指定する順序が重要になるためです。具体的には、ライブラリのシンボルを使用するオブジェクト ファイルの後にライブラリを指定する必要があります。

于 2009-10-15T17:13:25.823 に答える