我遇到過一些使用共享庫或動態加載模塊的項目,其中模塊/庫依賴於另一個庫,但在嘗試鏈接之前未檢查共享副本是否可用。這會導致來自靜態存檔文件(.a
文件)的目標文件被拉入到結果.so
中,並且由於這些目標文件是非PIC文件,因此生成的.so
文件或者具有TEXTREL(非常差的加載性能和內存使用率)或者完全失敗在x86_64等不支持非PIC共享庫的arch上)。鏈接共享庫時,我可以讓gcc忽略靜態庫嗎?
有什麼辦法可以讓gcc編譯器驅動程序拒絕將靜態庫代碼鏈接到共享庫輸出中嗎?這似乎是困難和複雜的可能需要鏈接從libgcc.a和最小的金額等...