[英]C++ dynamic and static libraries linking with CMake
我在C ++編譯方面需要一些幫助,因為我顯然缺少了一些東西。
我已經根據我編寫的其他.so庫(mylib2)和一些使用它的簡單程序創建了.so庫(我們將其稱為mylib)。 第二個庫也依賴於ANTLR 。 我使用CMake來構建兩個庫,它們都可以編譯和安裝。 但是當我嘗試編譯程序時:
cmd> g++ program.cpp -lmylib
我懂了
/usr/local/lib/libmylib2.so.0: undefined reference to `antlr::CharScanner::traceOut(char const*)'
ANTLR似乎是靜態庫,所以我嘗試了
cmd> g++ program.cpp -lmylib -Wl,-Bstatic -lantlr
但是我得到的就是
/usr/bin/ld: cannot find -lgcc_s
我在這里有兩個問題:
1)為什么mylib2無法看到antlr? 我應該提到,我使用自己的cmake查找腳本,這可能是個問題嗎?
find_package(ANTLR REQUIRED)
include_directories(${ANTLR_INCLUDE_DIR})
2)第二個錯誤是什么意思? 為什么ld無法找到libgcc_s?
我將非常感謝您的幫助。
編輯
我應該提到我正在使用ANTLR 2.7
來自man ld
(GNU ld):- -Bstatic
不鏈接共享庫。 您可以在命令行上多次使用此選項:它會影響庫搜索其后的-l選項。 因此,您應該在-lantlr
之后手動啟用使用動態庫。 請記住,使用-fPIC
選項鏈接未編譯的靜態庫可能會導致無法重定位的代碼和更長的應用程序啟動時間http://www.airs.com/blog/archives/41
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.