我與SFML工作的依存關係,我整理了一個小的測試程序,並添加了鏈接選項-lsfml-audio
。然後,我使用ldd ./program
來查看它鏈接到的動態庫。令人驚訝的是,有很多,我沒有手動選擇我的生成文件,也沒有使用pkg-config --libs
。鏈接共享庫
我開始閱讀關於共享庫,並提出了一個小例子來解決我的疑惑。不過,我有這樣一個問題:
爲什麼一些圖書館需要您添加的依賴在你的makefile (手動或使用像
pkg-config
腳本)和其他 庫自動鏈接它們的依賴?
當您建立動態庫,只是作爲g++ -shared ...
命令添加適當的-ldependency
選項,以避免用戶手動添加的依賴以後的麻煩一樣容易。爲什麼很多可用的庫不這樣做?
我猜它必須與微調的哪些庫獲取鏈接和這樣的能力。
我想我需要做一些罵人的位置:共享庫通常不會在它們的依賴拉(這是'libtool'當它看到一個'* .la'文件)。它們不需要包含它,因爲動態加載器會從共享庫中的'.NEEDED'頭中找出它們。除了libtool介紹的鏈接問題之外,不得不在鏈接時查找符號定義也會減慢構建的速度。 –
@ honk,是的,libtool是這些問題的一個來源。不過,pkg-config腳本也可以。無論如何,它們在ELF平臺上絕對不是必需的 - 您只需直接鏈接您使用的內容(儘管這包括通過內聯函數或宏使用的任何內容) – bdonlan