2011-06-29 71 views
5

我遇到過一些使用共享庫或動態加載模塊的項目,其中模塊/庫依賴於另一個庫,但在嘗試鏈接之前未檢查共享副本是否可用。這會導致來自靜態存檔文件(.a文件)的目標文件被拉入到結果.so中,並且由於這些目標文件是非PIC文件,因此生成的.so文件或者具有TEXTREL(非常差的加載性能和內存使用率)或者完全失敗在x86_64等不支持非PIC共享庫的arch上)。鏈接共享庫時,我可以讓gcc忽略靜態庫嗎?

有什麼辦法可以讓gcc編譯器驅動程序拒絕將靜態庫代碼鏈接到共享庫輸出中嗎?這似乎是困難和複雜的可能需要鏈接從libgcc.a和最小的金額等...

回答

1

如你所知,你可以使用-static只鏈接靜態庫,但似乎沒有相當於只與動態庫鏈接。

以下的答案可能是有用的...

How to link using GCC without -l nor hardcoding path for a library that does not follow the libNAME.so naming convention?

您可以使用-l:[庫名稱]。所以,列出你想在你的庫搜索路徑對鏈接的動態庫。指定.so結尾可能有助於您的動態庫唯一的情況。您可能必須使用'lib'前綴來指定整個名稱,而不僅僅是縮短的版本。