私のC++アプリケーションでは、システム、filsystem、timer、chronoをライブラリにリンクする静的ライブラリ(libCOMMON.a)があります。他の静的ライブラリにリンクする静的ライブラリに動的ライブラリをリンクする
ADD_LIBRARY(COMMON ${COMMON_SRCS})
target_link_libraries(COMMON
${BOOST_LIB_DIR}/libboost_filesystem.a
${BOOST_LIB_DIR}/libboost_system.a
${BOOST_LIB_DIR}/libboost_timer.a
${BOOST_LIB_DIR}/libboost_chrono.a
)
私もlibCOMMON.aにリンクこのアプリケーションのプラグインを持っている:私はここにCMakeを使用しています
は、どのように私が作成し、リンクlibCOMMON.aです。プラグインは動的ライブラリとして構築されています。すべてが正常にコンパイルされますが(gccを使用)、アプリケーションを起動すると、ブーストに関連するダイナミックライブラリのいくつかのシンボルを解決できないため、プラグインをロードできません。
解決策は、ブーストするために各プラグインをリンクすることでした。より良い方法がありますか? 私は、ブーストライブラリがlibCOMMON.aに静的にリンクされていれば、libCOMMON.aにプラグインをリンクすれば十分だろうと考えました。
誰かが何が起こっているのか説明できますか?
おかげ
libCOMMON.aの作成に使用されたコマンドを表示できますか?この問題を解決するにはいくつかの方法があります。 – Flexo
私はそれを行うためにCMakeを使用しています:ADD_LIBRARY(COMMON $ {COMMON_SRCS})。私は質問を編集し、詳細を追加しました。 – nbilal
静的ライブラリを他の静的ライブラリに「リンク」することはできません。静的ライブラリはオブジェクトファイルの集合です。他のライブラリを参照する仕組みはありません。いくつかの小さなライブラリから大きなライブラリを作成することもできますが、それは情報の重複を無駄にすることになります。 –