簡體   English   中英

使用靜態庫編譯的共享庫中的未定義符號

[英]Undefined symbols in a shared library compiled with a static library

我在一個可執行項目中將使用它的不同庫鏈接在一起時遇到問題。

假設項目A包含一個名為foo()的函數; 它被編譯為靜態庫。
項目B包含一個函數名為bar() ,包括來自A的報頭和編譯為一個共享庫-Wl--whole-archive libA.a -Wl--no-whole-archive flags
libB.so已移至/usr/lib

現在,項目C包含Bh ,調用bar() ,但是由於未定義對foo()函數的引用而未進行編譯,而foo()函數是在項目A中定義的。

nm libB.so說:

U foo

我正在使用gcc,編程語言是C,IDE是Eclipse CDT。

有誰有解決這個問題的想法或建議嗎?

謝謝。

感謝Icarus3的貢獻,這個問題得到了解決。

ProjectA中的某些功能使用了strict關鍵字,因此使用-std = gnu99進行了編譯。 事實證明,從代碼中刪除該關鍵字,從編譯命令中刪除-std = gnu99最終解決了該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM