Пути для поиска библиотек в будут перечислены в файле /etc/ld.so.conf
, переменная среды LD_LIBRARY_PATH
и любой RPATHs закодирован в двоичный файл ELF. Программа ldd
скажет Вам, какие библиотеки определенное приложение загрузит.
После того как у Вас есть символ, на предмет которого Вам любопытно, можно использовать программу nm
вывести символы .o
и .a
файлы и readelf
вывести символы от a .so
или любой исполняемый файл эльфа.
Примеры:
nm -g /usr/lib/blah.a
readelf -Ws /usr/lib/blah.so
И наконец, с тем фоном в стороне, вот Ваш Святой Грааль:
Учитывая символ _ZN6Kopete6Global10PropertiesC2Ev
, где это?
scanelf -l -s _ZN6Kopete6Global10PropertiesC2Ev | grep _ZN6Kopete6Global10PropertiesC2Ev
который уступает:
ET_DYN _ZN6Kopete6Global10PropertiesC2Ev /usr/lib64/libkopete.so.4.11.4
-l
флаг говорит для поиска директоров в /etc/ld.so.conf
и -s
указывает символ для нахождения.
В системах GNU (при использовании GNU libc динамический компоновщик), можно запустить программу как:
LD_DEBUG=bindings kst2
Найти, где символы разрешают.
Я сталкивался с этим несколько раз, пытаясь перенести код с одной системы Linux на другую. Обычно я просто просматриваю все стандартные каталоги. Я ничего не нашел в гугле. Вот быстрый сценарий:
scanelf
позволяет Вам указывать определенные каталоги, чтобы искать в и поддерживать рекурсивный seaching с-r
таким образом, можно настроить его пути поиска или искать всю систему без слишком большой проблемы. Например,scanelf -r -s SYMBOL /lib/* /usr/* /opt/*
найдет, что большинство библиотек мест скрывается. – casey 05.12.2013, 05:41