Содержит ли таблица символов имя библиотеки для каждого неопределенного символа? - PullRequest
0 голосов
/ 14 декабря 2018

Допустим, у нас есть общая библиотека libA, которая зависит от другой общей библиотеки libB.Мы создаем libA следующим образом:

$ g++ -I/header/files/of/libB -lB libA.cpp -o libA.so

Символы, экспортируемые libB, сохраняются в таблице символов libA.Но где хранится имя библиотеки "libB.so"?Он также хранится в таблице символов?Могу ли я увидеть соответствующее имя библиотеки для каждого неопределенного символа libA (например, с помощью инструмента nm)?

Если libA зависит от libB, libC, libD, я бы хотел увидеть что-то вроде этого:

undefined_symbol_1 - libB.so
undefined_symbol_2 - libC.so
undefined_symbol_3 - libD.so

и т. Д.

1 Ответ

0 голосов
/ 14 декабря 2018

В исполняемых файлах ELF он хранится в таблице символов в исполняемом файле, да (хотя это не та таблица символов, в которой живут имена ваших функций! Вот что даст вам nm).

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

readelf расскажет вам больше.

Для других исполняемых форматов будут / должны быть эквиваленты, но я не могу рассказать вам о них подробнее.

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