7

Boostのシリアル化ライブラリを使用したいC++プロジェクトに取り組んでいます。Boostのホームページから最新のBoostライブラリをダウンロードしてインストールしました。

Boostのデモシリアル化の例の1つをコンパイルして実行しようとすると、次のようなあらゆる種類のエラーが発生しました。

    /usr/local/include/boost/archive/detail/iserializer.hpp:173: undefined reference to `boost::archive::archive_exception::~archive_exception()'
./demo.o: In function `void boost::archive::detail::save_non_pointer_type<boost::archive::text_oarchive>::save_standard::invoke<bus_schedule::trip_info>(boost::archive::text_oarchive&, bus_schedule::trip_info const&)':
/usr/local/include/boost/archive/detail/oserializer.hpp:253: undefined reference to `boost::archive::detail::basic_oarchive::save_object(void const*, boost::archive::detail::basic_oserializer const&)'
./demo.o: In function `void boost::archive::save_access::end_preamble<boost::archive::text_oarchive>(boost::archive::text_oarchive&)':
/usr/local/include/boost/archive/detail/oserializer.hpp:83: undefined reference to `boost::archive::detail::basic_oarchive::end_preamble()'
./demo.o: In function `void boost::archive::detail::load_pointer_type<boost::archive::text_iarchive>::invoke<bus_route*>(boost::archive::text_iarchive&, bus_route*&)':
/usr/local/include/boost/archive/detail/iserializer.hpp:518: undefined reference to `boost::archive::detail::basic_iarchive::load_pointer(void*&, boost::archive::detail::basic_pointer_iserializer const*, boost::archive::detail::basic_pointer_iserializer const* (*)(boost::serialization::extended_type_info const&))'
./demo.o: In function `void boost::archive::detail::save_pointer_type<boost::archive::text_oarchive>::non_polymorphic::save<bus_route>(boost::archive::text_oarchive&, bus_route&)':

私はC++とブーストに不慣れなので、助けていただければ幸いです。

ありがとう

4

3 に答える 3

12

おそらく、シリアル化ライブラリにリンクする必要があります。/usr/libに似た名前の何かを探してくださいlibboost_serialization。次に、g++このライブラリを使用する(リンクする)ことを伝えます(使用しているコンパイラは指定していません)。

g++ main.cpp -lboost_serialization

つまり、ライブラリの名前が/usr/lib/libboost_serialization.aあなたである場合、頭文字libと拡張子を省略します。

幸運を!

于 2010-10-14T08:44:09.133 に答える
5

みなさん、ありがとうございました。私の解決策はかなり反気候的であり、おそらくそれほど有益ではありませんが、私は最終的に私の問題を解決しました。

BoostのWebサイトから直接ダウンロードして、Boostライブラリを手動でインストールしようとしましたが、すべてのライブラリが/ usr / local/libと/usr/ local / include /boost/にインストールされていることがわかりました。元のエラーに繰り返し遭遇した後、SynapticPackageManagerがBoostライブラリをインストールする「より良い」仕事をすることができるかどうかを確認することにしました。すべてをインストールするために「libboost1.40-all-dev」を選択しましたが、それでも何も機能していませんでした。

最後に、最初からやり直すことにしたので、/ usr / local /includeのboost/ディレクトリを手動で削除し、/ usr / local/libのすべてのlibboostファイルを削除しました。次に、すべてを削除するために、すべてのBoostライブラリに完全な削除のマークを付けました。すべてのBoostライブラリがアンインストールされたら、Synaptic Package Managerに戻り、もう一度「libboost1.40-all-dev」を選択しました。

ライブラリを再インストールしたときに何が正確に変わったかはわかりませんが、すべてが再び機能し始めました。最初にコマンドラインからテストし、次のコマンドを使用して、boostのWebサイトからdemo.cppをもう一度コンパイルしようとしました。

g++ demo.cpp -lboost_serialization

そしてそれはすぐにコンパイルされました。実行可能ファイルを実行すると、探していた結果が正確に表示されました。さらに、ファイルをEclipseプロジェクトに戻し、リンカーライブラリに「boost_serialization」を追加して、プロジェクトをビルドしようとしました。プロジェクトをビルドしてサンプルコードを実行できたので、すべてが再び完全に機能しました。

これで問題が解決した理由については説明がありませんが、同様の問題が発生している他の人には、Boostライブラリを直接インストールするのではなく、SynapticPackageManagerにすべてを処理させることをお勧めします。

皆さん、ありがとうございました。あなたは非常に役に立ちました。

于 2010-10-14T17:00:31.360 に答える
1

Boost.Serializationライブラリにリンクする必要があります。Boostのスタートページをご覧ください。

于 2010-10-14T08:28:07.877 に答える