Как бы вы перечислили доступные функции и т.д., содержащиеся в скомпилированной библиотеке? - PullRequest
10 голосов
/ 24 декабря 2008

Как определить, существует ли функция в библиотеке, или перечислить функции в скомпилированной библиотеке?

Ответы [ 5 ]

18 голосов
/ 24 декабря 2008

Вы можете использовать команду nm для вывода списка символов в статических библиотеках.

nm -g -C <libMylib.a>
10 голосов
/ 24 декабря 2008

Для двоичных файлов ELF вы можете использовать readelf:

readelf -sW a.out | awk '$4 == "FUNC"' | c++filt

-s: список символов -W: не сокращайте слишком длинные имена

Затем команда awk отфильтрует все функции, а c ++ filla отменит их. Это означает, что он преобразует их из внутренней схемы именования, чтобы они отображались в удобочитаемой форме. Он выводит имена, похожие на это (взято из boost.filesystem lib):

285: 0000bef0    91 FUNC    WEAK   DEFAULT   11 boost::exception::~exception()

Без C ++ Filta, имя отображается как _ZN5boost9exceptionD0Ev

7 голосов
/ 24 декабря 2008

Для инструментов Microsoft "link /dump /symbols <filename>" предоставит вам подробности. Возможно, есть и другие способы (или варианты), чтобы упростить чтение списка.

6 голосов
/ 24 декабря 2008

В Linux / Unix вы можете использовать objdump -T для вывода списка экспортируемых символов, содержащихся в данном объекте. Под Windows есть dumpbin (IIRC dumpbin /exports). Обратите внимание, что имена функций C ++ искажены, чтобы разрешить перегрузки.

РЕДАКТИРОВАТЬ: после просмотра Codelogic anwser я вспомнил, что objdump также понимает -C для выполнения де-искажения.

4 голосов
/ 24 декабря 2008

используйте эту команду:

objdump -t "your-library"

Он напечатает больше, чем вы хотите - не только имена функций, но и всю таблицу символов. Проверьте различные атрибуты символов, которые вы получаете, и вы сможете сортировать функции из переменных и прочее.

...