簡體   English   中英

Gcc鏈接器自動查找所需的額外庫

[英]Gcc linker automagically finds needed extra libraries

我正在2台不同的機器上開發和測試一些代碼:我自己的* buntu筆記本電腦和其他人配置的遠程linux機器。

我的代碼使用一個庫,比如libfoo,它又依賴於libbase。 我想在兩台機器上都保留一個makefile,但是當我使用GCC構建項目時,發現工作方式有所不同:

  • 在我的筆記本電腦上,我需要指定-lfoo -lbase以便代碼正確鏈接。
  • 在遠程計算機上,我只需要-lfoo標志,並且鏈接程序會以某種方式自動選擇基礎庫。

有人知道發生了什么嗎? 從源代碼構建libfoo時,是否有可能傳遞了任何標志,從而使這種自動的“依賴檢測”成為可能?

PS:我知道我可以只指定make文件中的每個庫,但是將標志列表保持在最低限度看起來很有趣,而且我想知道幕后情況。

是。 -lfoo-lbase引用某些共享庫libfoo.solibbase.so (可能具有某些版本號)。

在遠程計算機上, libfoo.so已構建並鏈接到libbase.so ,也許是從foo1.cfoo2.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.solibbase.so (的絕對路徑)上使用ldd來查找它們如何鏈接的。

暫無
暫無

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

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