Как проверить открытые функции Shared Library в программе - PullRequest
1 голос
/ 08 июля 2010

Я использую стороннюю общую библиотеку, и мне нужно проверить, экспортируется ли функция общей библиотекой программно.

Как это сделать.Мне это нужно, потому что если функция не существует, мне нужно запустить какую-то другую функцию локально.

Ответы [ 3 ]

2 голосов
/ 08 июля 2010

Возможно, вы могли бы использовать dlsym для этого.

Если вы загрузите библиотеку с помощью dlopen, вы будете использовать возвращаемый ей дескриптор.

Если высвязанные с этой библиотекой, вы можете использовать специальные псевдо-дескрипторы (от 10x до caf для указания на нее):

От dlsym man:

Существует двапсевдо-дескрипторы, RTLD_DEFAULT и RTLD_NEXT.Первый найдет первое вхождение нужного символа, используя порядок поиска в библиотеке по умолчанию.Последний найдет следующее вхождение функции в порядке поиска после текущей библиотеки.Это позволяет создать оболочку для функции в другой общей библиотеке.

0 голосов
/ 19 июля 2016

может быть, вы можете использовать команду objdump для проверки всех отображаемых символов, таких как objdump -T libtest.so

0 голосов
/ 08 июля 2010

Проверьте заголовочный файл предполагаемой библиотеки, чтобы получить сигнатуру функции. Используя dlopen , вы можете динамически загружать библиотеку и извлекать символ, если он отображается в библиотеке с последующими вызовами dlsym и dlclose.

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