簡體   English   中英

GCC 將共享庫鏈接到可執行文件

[英]GCC Linking a shared library against an executable

我有以下問題。 我有一個共享庫,它只是一堆鏈接在一起的翻譯單元,所以當我編譯那個共享庫時,我不會得到任何鏈接器錯誤(未定義的引用,即使我可能有)。

共享庫從一個可執行文件動態加載,該可執行文件還包含我的共享庫正在使用的導出(我的庫中使用的引用在運行時解析)。

主要問題是我想要未定義的引用警告,以便我可以靜態修復它們,而不是等待應用程序崩潰。

我在某處讀到我可以將“-Wl,--no-undefined”傳遞給gcc,這樣我就可以恢復這些錯誤,確實有效,但它也給了我可執行文件導出的所有未定義引用。 我想將這些警告過濾到我的翻譯單元的范圍內。

這可能嗎? 如果沒有,我如何定義對具有共享庫導出的可執行文件的引用。

您可以嘗試使用-Wl,-z,now鏈接庫和主程序。 這應該使運行時 ldso 立即解析所有引用,如果沒有找到則拋出錯誤。

否則,我在鏈接器手冊中沒有看到一個選項說“允許這個 ELF 滿足符號,但實際上不要將它列為 DT_NEEDED”。

您可以嘗試使用-Wl,--no-undefined並使用腳本解析輸出,以便過濾掉您知道主程序會滿足的符號。

另一種選擇可能是用__attribute__((weak))標記您知道主程序提供的所有符號,然后仍然使用-Wl,--no-undefined 弱符號不會被報告為錯誤。

暫無
暫無

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

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