1
在我的C++應用程序中,我有一個鏈接到boost庫的靜態庫(libCOMMON.a):system,filsystem,timer和chrono。將動態庫鏈接到鏈接到其他靜態庫的靜態庫
我使用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),但是當我啓動應用程序時,無法加載插件,因爲與boost相關的動態庫中的某些符號無法解析。
解決方案是鏈接每個插件來提升。有沒有更好的辦法 ? 我認爲如果boost庫靜態鏈接到libCOMMON.a中,將插件鏈接到libCOMMON.a就足夠了。
有人可以解釋發生了什麼?
感謝
可以顯示用於生成libCOMMON.a的命令嗎?有幾種方法可以解決這個問題。 – Flexo
我使用CMake來做到這一點:ADD_LIBRARY(COMMON $ {COMMON_SRCS})。我編輯了這個問題並添加了更多細節。 – nbilal
靜態庫不能「鏈接到」其他靜態庫。靜態庫只是對象文件的集合。沒有任何機制可以引用其他庫。你可以從幾個小型圖書館中創建一個大型圖書館,但這對於重複信息是毫無意義的練習。 –