2

boost_system共有オブジェクトを使用するサンプルアプリケーションがあります。ここで、特定のシナリオのために、2つの異なるboost_system共有オブジェクトをサポートする必要があります。1つはgccで構築され、もう1つは単一ディレクトリにsunのccで構築されます-/ home/mydir。対応するファイルは次のとおりです。-

libboost_system_v1.so --dependency for--- applicationv1.so
libboost_system_v2.so --dependency for--- applicationv2.so

これは、makefileでとしてリンクされています。

... $(BOOST_LIB_V1) -lboost_system_v1

したがって、libboost_system_1_41_0.soの名前をlibboost_system_v1.soに変更し、$ BOOST_HOME_V1 / stage/libからソフトリンクも削除しました。さて、アプリケーションをビルドしようとすると、エラーは発生しません。ただし、lddは次の場合に失敗します:-

ldd /home/mydir/applicationv1.so         
    libboost_system.so.1.41.0 => not found
    .....................................
    .....................................
    .....................................

BOOST_HOME_v1 / stage / lib(= BOOST_LIB_v1)は次のようになります:-

libboost_system_v1.so
libboost_system_v1.a

理解できません-なぜldDはlibboost_system_v1.soではなくlibboost_system.so.1.41.0を依存関係として表示するのですか?

私は以下のo/pを見ることを期待していましたが、これは得られたものではありません:-

ldd /home/mydir/applicationv1.so
     libboost_system_v1.so -> /home/mydir/libboost_system_v1.so

誰かが実際に共有オブジェクトの名前を変更し、boostのデフォルトのシンボリックリンクを処理しない解決策があるかどうか説明できますか?src / build.jamをチェックしました-ここでリンクが行われているようです-しかし、ソフトリンクを削除し、共有オブジェクトの名前を変更し、makefileで名前を変更した共有オブジェクトにリンクする限り、問題はないはずです。

4

0 に答える 0