[英]making gcc prefer static libs to shared objects when linking?
當使用-l
選項(比如-lfoo
)鏈接庫時,如果找到兩個共享對象,gcc將更喜歡共享對象(更喜歡libfoo.so
到libfoo.a
)。 有沒有辦法讓gcc更喜歡靜態庫,如果兩者都找到了?
我正在嘗試解決的問題如下:我正在為應用程序(飛行模擬器稱為X-Plane)創建一個插件,具有以下約束:
/usr/lib
或/usr/lib32
:
LD_PRELOAD
或LD_LIBRARY_PATH
來查找我的插件附帶的共享對象 為了解決上述約束,一種可能的解決方案是將生成的共享對象鏈接到所使用的所有非平凡庫的靜態32位版本。 但是,在安裝這些庫時,通常會安裝靜態和動態版本,因此gcc將始終鏈接到共享對象而不是靜態庫。
當然,移動/刪除/刪除有問題的共享對象,只是將靜態庫放在說/usr/lib32
,是一種解決方法,但它不是一個好的
注意:
-Wl,-static -lfoo -Wl,-Bdynamic,
但沒有帶來預期的結果 -l:libfoo.a
,但這也沒有帶來預期的結果 您可以指定靜態庫的完整路徑,而不使用-l
標志來鏈接這些庫。
gcc ... source.c ... /usr/lib32/libmysuperlib.a ...
只需將.a
文件添加到沒有-l
的鏈接行,就好像它是.o
文件一樣。
它已過時,但可能有效: http : //www.network-theory.co.uk/docs/gccintro/gccintro_25.html
(幾乎在頁面的末尾)
“ 如前所述,通過在命令行上指定庫的完整路徑,也可以直接鏈接到各個庫文件。 ”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.