Как правило, библиотека .a
- это просто архив, который сам содержит кучу объектных файлов. Эти команды выполняются в Linux, они будут разными на разных платформах. Обычно вы можете просмотреть основное содержимое архива, набрав nm libxxx.a
/usr/lib> nm libc.a | head -10
init-first.o:
U abort
U _dl_non_dynamic_init
0000000000000000 T _dl_start
w _dl_starting_up
U __environ
U __fpu_control
U __init_misc
0000000000000004 C __libc_argc
Справочная страница nm
содержит множество подробностей о том, что означает вывод.
Команда ar
может извлечь отдельные файлы для вас, например,
~/tmp> ar x libc.a init-first.o
~/tmp> file init-first.o
init-first.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
Как вы можете видеть выше, объекты здесь имеют формат ELF, поэтому для сложного фрагмента того, что вы спрашивали, действительно нужно то, что может проверять двоичные файлы ELF. Linux обычно поставляется с командой readelf
, которая выдаст много информации в командной строке:
~/tmp> readelf -s init-first.o
Symbol table '.symtab' contains 19 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 SECTION LOCAL DEFAULT 1
2: 00000000 0 SECTION LOCAL DEFAULT 3
3: 00000000 0 SECTION LOCAL DEFAULT 4
4: 00000000 0 SECTION LOCAL DEFAULT 5
5: 00000000 0 SECTION LOCAL DEFAULT 6
6: 00000000 11 FUNC GLOBAL DEFAULT 1 _dl_start
7: 00000000 0 NOTYPE GLOBAL DEFAULT UND abort
8: 00000010 133 FUNC GLOBAL DEFAULT 1 __libc_init_first
9: 00000000 0 NOTYPE WEAK DEFAULT UND _dl_starting_up
...
Существует библиотека libelf
, которая очень вероятно делает то, что вы хотите, и получает доступ к этой информации программно. Я никогда не использовал его, так как всегда получал необходимую информацию из доступных инструментов командной строки.
http://directory.fsf.org/wiki/Libelf