Как вывести список файлов внутри .a файла - PullRequest
11 голосов
/ 25 января 2012

Как я могу узнать, какие файлы являются частью моего .a файла? Какую команду мне использовать?

Ответы [ 3 ]

12 голосов
/ 25 января 2012

Если вы не удаляли символы, вы можете использовать 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 - подробный, который печатает имя объектного файла при его извлечении.

4 голосов
/ 07 ноября 2014

Я думаю, что было бы проще использовать ar для его значения (манипулирование архивами)

ar t foo.a

со страницы руководства:

-t Вывести указанные файлы в том порядке, в котором они появляются в архиве, каждый в отдельной строке. Если файлы не указаны, отображаются все файлы в архиве.

man 1 ar для получения дополнительной информации.

0 голосов
/ 25 января 2012

Это работало с приведенной ниже командой: нм <> | grep ".o" | sed "s /. (// g" | sed "s /). // g" | Uniq

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...