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

Abh*_*nav 10 iphone cocoa-touch ios

我怎样才能知道哪些文件是我的.a文件的一部分?我应该使用哪个命令?

gre*_*reg 12

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

$ nm foo.a
foo.a(objectFile1.o):
0000000000000000 T _function1
foo.a(objectFile2.o):
0000000000000000 T _function2
Run Code Online (Sandbox Code Playgroud)

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

$ 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:
Run Code Online (Sandbox Code Playgroud)

上述12个.o文件中的每一个都是原始代码中的翻译单元,使用-cgcc选项进行编译.我曾经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
Run Code Online (Sandbox Code Playgroud)

x选项用于提取并且v是详细的,它在提取时打印目标文件的名称.


Ant*_*sse 5

我认为使用ar它的意思会更简单(处理档案)

ar t foo.a
Run Code Online (Sandbox Code Playgroud)

从手册页:

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

man 1 ar 有关更多信息。