如何列出.a文件中的文件

时间:2012-01-25 00:34:31

标签: iphone ios cocoa-touch

如何才能了解哪些文件属于我的.a文件?我应该使用哪个命令?

3 个答案:

答案 0 :(得分:11)

如果您没有删除符号,则可以使用nm查看目标文件的名称(.o)。

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

此输出在不同的操作系统上会有所不同。例如,这是Ubuntu系统上libz.a内符号的输出:

$ 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是详细的,它在提取时打印目标文件的名称。

答案 1 :(得分:4)

我认为将ar用于它的含义(操纵档案)会更简单

ar t foo.a

从手册页:

  

-t按照它们在归档中的显示顺序列出指定的文件,每个文件都在一个单独的行中。如果未指定文件,则列出存档中的所有文件。

man 1 ar了解更多信息。

答案 2 :(得分:0)

这适用于以下命令: nm<> | grep“.o”| sed“s /。(// g”| sed“s /). // g”| uniq的