2012-01-25 25 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欲了解更多信息。