Если вы хотите узнать, существует ли динамический символ с именем "foo"
, используйте dlsym(RTLD_DEFAULT, "foo")
, чтобы узнать адрес такого символа, или NULL
, если такого динамического символа нет.
Я не знаю, почему вас волнует имя общей библиотеки.
Если у вас есть адрес символа, вы всегда можете прочитать /proc/self/maps
псевдофайл, чтобы узнать, из какого двоичного файла происходит символ.(Если символ находится в отображении r--
, он является неизменным, как, например, строковый литерал. Если он находится в отображении r-x
, он находится в коде, возможно, в функции. Он, если в rw-
mapping, это глобальная переменная.) Обратите внимание, что, поскольку это псевдофайл, он является частью двоичного интерфейса ядра и никогда не локализуется.