[英]Linking in a static library failes, but linking a shared library succeeds
我可以針對共享庫構建應用程序,但將其與同一庫的靜態版本鏈接時出現未解決的符號錯誤:
我可以這樣構建我的應用程序:
g++ -lutils application.cpp -o application.exe
上面的命令鏈接了utils庫的共享版本。
我正在嘗試像這樣的靜態版本的庫鏈接:
g++ -l:utils.a application.cpp -o application.exe
兩次我都在使用
export LD_LIBRARY_PATH=path/to/utils:$LD_LIBRARY_PATH
通知g ++ utils.a的放置位置。
ld報告的未解析符號出現在nm的輸出中:
nm --defined-only path/to/utils.a
並標有“ T”(表示它來自代碼部分)。
我正在嘗試找出問題的原因。
使用LD_LIBRARY_PATH指定在哪里搜索utils.a是否正確?
驗證靜態庫定義(解析)符號的確切命令是什么? 是命令
nm --defined-only path/to/utils.a
足夠還是我應該使用其他任何選項,例如
nm --defined-only --demangle path/to/utils.a
例如?
對於編譯器來說,僅選項-static應該足夠了。 如果只有一個庫必須是靜態的,則-static-和lib name是短名稱而不是文件名。
使用LD_LIBRARY_PATH指定在哪里搜索utils.a是否正確?
驗證靜態庫定義(解析)符號的確切命令是什么? 是命令nm --defined-only path / to / utils.a
請參閱GNU文檔GCC鏈接選項摘錄:
-l library:鏈接時搜索名為library的庫。 鏈接器在標准目錄列表中搜索該庫。 搜索的目錄包括幾個標准系統目錄以及您使用-L指定的目錄。
另外,使用-l鏈接選項,您需要提供庫名(不帶“ lib”和擴展名)或完整文件名。 -lutils或-llibutils.a如果需要,也可以僅在此處提供直接的完整路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.