2

私の C++ アプリケーションには、ブースト ライブラリ (system、filsystem、timer、および chrono) にリンクするスタティック ライブラリ (libCOMMON.a) があります。

私はCMakeを使用しています.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 にリンクするこのアプリケーション用のプラグインもあります。プラグインは動的ライブラリとして構築されます。(gcc を使用して) すべて正常にコンパイルされますが、アプリケーションを起動すると、ブーストに関連する動的ライブラリ内の一部のシンボルを解決できないため、プラグインをロードできません。

解決策は、各プラグインをブーストにリンクすることでした。より良い方法はありますか?ブースト ライブラリが libCOMMON.a に静的にリンクされている場合は、プラグインを libCOMMON.a にリンクするだけで十分であると考えました。

誰かが何が起こっているのか説明できますか?

ありがとう

4

1 に答える 1

1

問題は、boost ライブラリがデフォルトで動的ライブラリとして構築されていることだと思います。「.a」が静的ライブラリとしてビルドされていることを示唆している場合でも、boost の lib フォルダーには「.a」ごとに「.so」ライブラリが含まれています。これは、libCOMMON.a が動的にリンクされてライブラリをブーストすることを意味します。このため、libCOMMON.a に静的にリンクするプラグインは、boost ライブラリにも動的にリンクする必要があります。より良い解決策は、ブースト ライブラリを静的ライブラリとしてビルドすることです。

于 2012-05-08T20:01:28.327 に答える