Найдите, где общий символ библиотеки определяется в живой системе / перечисляют все символы, экспортируемые в системе

Если /mnt/ используется для временных объемов, возможно /vol/volumename как в Mac OS X для стабильного монтирования объема было бы лучшим.

Я думаю, что FHS должен дать больше инструкций.

21
05.12.2013, 00:01
3 ответа

Пути для поиска библиотек в будут перечислены в файле /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 указывает символ для нахождения.

16
27.01.2020, 19:43
  • 1
    Это неполно: некоторые программы загружают библиотеки из специализированных каталогов. –  Gilles 'SO- stop being evil' 05.12.2013, 03:08
  • 2
    @Gilles scanelf позволяет Вам указывать определенные каталоги, чтобы искать в и поддерживать рекурсивный seaching с -r таким образом, можно настроить его пути поиска или искать всю систему без слишком большой проблемы. Например, scanelf -r -s SYMBOL /lib/* /usr/* /opt/* найдет, что большинство библиотек мест скрывается. –  casey 05.12.2013, 05:41

В системах GNU (при использовании GNU libc динамический компоновщик), можно запустить программу как:

LD_DEBUG=bindings kst2

Найти, где символы разрешают.

7
27.01.2020, 19:43

Я сталкивался с этим несколько раз, пытаясь перенести код с одной системы Linux на другую. Обычно я просто просматриваю все стандартные каталоги. Я ничего не нашел в гугле. Вот быстрый сценарий:

edt11x / findinsharedlibs

0
27.01.2020, 19:43

Теги

Похожие вопросы