[英]Gcc linker automagically finds needed extra libraries
我正在2台不同的機器上開發和測試一些代碼:我自己的* buntu筆記本電腦和其他人配置的遠程linux機器。
我的代碼使用一個庫,比如libfoo,它又依賴於libbase。 我想在兩台機器上都保留一個makefile,但是當我使用GCC構建項目時,發現工作方式有所不同:
有人知道發生了什么嗎? 從源代碼構建libfoo時,是否有可能傳遞了任何標志,從而使這種自動的“依賴檢測”成為可能?
PS:我知道我可以只指定make文件中的每個庫,但是將標志列表保持在最低限度看起來很有趣,而且我想知道幕后情況。
是。 -lfoo
和-lbase
引用某些共享庫libfoo.so
和libbase.so
(可能具有某些版本號)。
在遠程計算機上, libfoo.so
已構建並鏈接到libbase.so
,也許是從foo1.c
和foo2.c
類的
gcc -Wall -O -fPIC foo1.c -o foo1.pic.o
gcc -Wall -O -fPIC foo2.c -o foo2.pic.o
gcc -shared -O foo1.pic.o foo2.pic.o -lbase -o libfoo.so
(當然,可能某些Makefile
確實通過make
在命令之上運行)
在您自己的筆記本電腦上,您(或發行商)沒有在libfoo.so
鏈接-lbase
閱讀Drepper的如何編寫共享庫 (長)論文(以及程序庫howto )
可以將共享(低級)庫鏈接到另一個(高級)共享庫中(而靜態庫libfoo.a
則無法實現)。
您可以在庫libfoo.so
和libbase.so
(的絕對路徑)上使用ldd
來查找它們如何鏈接的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.