2012-01-25 38 views

回答

9

如果您沒有去掉符號,則可以使用nm來查看對象文件的名稱(.o)。

$ nm foo.a 
foo.a(objectFile1.o): 
0000000000000000 T _function1 
foo.a(objectFile2.o): 
0000000000000000 T _function2 

該輸出在不同的操作系統上會有所不同。舉例來說,這裏是符號的內libz.a輸出一個Ubuntu系統上:

$ nm libz.a | grep ".o:" 
adler32.o: 
compress.o: 
crc32.o: 
gzio.o: 
uncompr.o: 
deflate.o: 
trees.o: 
zutil.o: 
inflate.o: 
infback.o: 
inftrees.o: 
inffast.o: 

上述每12個.o文件的是翻譯單位的原代碼,用-c選項GCC編譯。我使用grep來忽略每個目標文件中定義和引用的無數符號。編譯之後,這些目標文件將被合併到一個帶有ar的靜態庫中。

ar也可以提取目標文件。在同一libz.a

$ ar xv libz.a 
x - adler32.o 
x - compress.o 
x - crc32.o 
x - gzio.o 
x - uncompr.o 
x - deflate.o 
x - trees.o 
x - zutil.o 
x - inflate.o 
x - infback.o 
x - inftrees.o 
x - inffast.o 

x選項對於提取物和v是冗長的,因爲它被提取用於打印的目標文件的名稱。

+0

該列表下文件內使用,以及所有的對象。什麼是隻打印.a文件的命令。例如,.a中的.o文件。 – Abhinav

+0

這正是'nm'告訴你的。例如,在我的Ubuntu機器上:'nm /usr/lib/libz.a | grep「.o:」'返回包含'libz.a'的12個'.o'文件。你是這個意思嗎? – greg

+0

是的,你是對的。但是使用nm my.a | grep「.o:」返回方法調用.o文件中的一些內容,但不會列出所有.o文件。我在這裏做錯了什麼? – Abhinav

0

這曾與下面的命令: 納米<> | grep「.o」| SED 「S/。(//克」 | sed的 「S /) //克。」 | uniq的

2

我認爲這將是簡單的使用ar東西它的意思(操作檔案)

ar t foo.a 

從手冊頁:

-t列出的順序指定的文件中,他們出現在檔案中,每個都在一個單獨的行上。如果未指定文件,則列出存檔中的所有文件。

man 1 ar欲瞭解更多信息。