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

StackOverflow https://stackoverflow.com/questions/392142

  •  23-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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 "ваша библиотека"

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top