2016-11-24 36 views
3

對於靜態庫(.a文件),如何列出它的模塊級依賴關係?如何列出c/C++靜態庫的依賴關係?

我知道一個共享庫(的.so),我們可以使用objdump的readelf做到這一點:

objdump -p test.so 

readelf -d test.so 

我能得到這樣的

需要libOne.so

的必需libc.so.6的

但對於靜態庫,我只能得到符號級的依賴性,例如,通過運行

objdump -T test.a 

我會得到一些東西像:

00000000 DF UND 00000000的QByteArray ::中期(INT,INT)常量

00000000 DF UND 00000000 QUrl :: fromEncoded(QByteArray中常量&)

00000000 DF UND 00000000 QFileInfo ::文件名()const的

但我需要在模塊級的信息,有誰知道如何獲得這些信息?

回答

3

靜態庫沒有這樣的依賴關係列表。

靜態庫只不過是對象文件的存檔。由於對象文件不知道它們依賴於哪些庫,靜態庫也不知道。

+1

我想說的原因是,靜態庫不是**鏈接**。因此,到目前爲止,構建鏈中沒有人負責將這些信息添加到其中。 –

+0

@JanSmrč[email protected]程序員哥們但是如何在不知道信息的情況下生成靜態庫?例如,庫A使用另一個庫B中定義的函數。如果我們不添加類似'#include「B.h」'的函數,A可以生成嗎?在這種情況下,我們可以說A取決於B嗎? – bagebb

+0

@bagebb就像其他任何對象文件一樣。用來創建靜態庫的'ar'命令是一個簡單而非常簡單的* ARchiver *。對於靜態庫,您需要跟蹤依賴關係,並明確鏈接它們。鏈接器無能爲力,它所做的基本上就是提取目標文件並與它們鏈接。 –

相關問題