Как бы вы перечислили доступные функции и т. д., содержащиеся в скомпилированной библиотеке?
Вопрос
Как определить, существует ли функция в библиотеке, или составить список функций в скомпилированной библиотеке?
Решение
Вы можете использовать нм команда для вывода списка символов в статических библиотеках.
nm -g -C <libMylib.a>
Другие советы
Для двоичных файлов ELF вы можете использовать readelf:
readelf -sW a.out | awk '$4 == "FUNC"' | c++filt
-s
:символы списка-W
:не сокращайте слишком длинные имена
Затем команда awk отфильтрует все функции, а c++filt разберёт их.Это означает, что они преобразуются из внутренней схемы именования, чтобы они отображались в удобочитаемой форме.Он выводит имена, подобные этому (взятые из библиотеки boost.filesystem):
285: 0000bef0 91 FUNC WEAK DEFAULT 11 boost::exception::~exception()
Без c++filt имя отображается как _ZN5boost9exceptionD0Ev
Для инструментов Microsoft "link /dump /symbols <filename>
" расскажу вам кровавые подробности.Вероятно, есть другие способы (или варианты) сделать листинг более читаемым.
В Linux/Unix вы можете использовать objdump -T
для вывода списка экспортированных символов, содержащихся в данном объекте.Под Windows есть dumpbin
(ИИРК dumpbin /exports
).Обратите внимание, что имена функций C++ искажены, чтобы обеспечить возможность перегрузок.
РЕДАКТИРОВАТЬ:после просмотра codelogic ответ Я вспомнил, что objdump также понимает -C для выполнения разборки.
используйте эту команду:
objdump -t "ваша библиотека"
Он напечатает больше, чем вам нужно — не только имена функций, но и всю таблицу символов.Проверьте различные атрибуты получаемых символов, и вы сможете отличить функции от переменных и прочего.