SerafimArts
@SerafimArts
Senior Notepad Reader

Как получить полный путь к so библиотеке?

Судя по мануалу функция "dlopen" позволяет подключить so, передав туда наименование библиотеки. Далее оно производит поиск и подключает эту самую библиотеку.

Однако прошутдировав мануал я не нашёл ни одной функции, которая бы возвращала реальное физическое расположение библиотеки по этому самому имени. Что-то вроде dlfind("some.so"); // => /usr/lib/some.so.3

Единственный вариант, который придумался - это запускать процесс "strings -n5 /etc/ld.so.cache", затем нехитрыми манипуляциями получать список всех возможных директорий и там находить нужную so.

Однако проблемы такого подхода:
1) Создание дочернего процесса, что мне не особо нравится
2) Файл "ld.so.cache" может не существовать физически (ну например его кто-то грохнул), а dlopen при этом замечательно продолжает работать.

Тыкните в мануал плиз, как получить полный путь к *.so библиотеке по её имени? Ну или как получить список всех директорий, где могут лежать эти либы: Тогда простым перебором можно найти полный путь руками.

P.S. Придумался ещё вариант ручного считывания /etc/ld.so.conf. Кажется, пока что это самый адекватный вариант.
  • Вопрос задан
  • 332 просмотра
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега Linux
Любые ответы на любые вопросы
dladdr выдает структуру, в которой есть полный путь к .so

typedef struct {
               const char *dli_fname;  /* Pathname of shared object that
                                          contains address */
               void       *dli_fbase;  /* Base address at which shared
                                          object is loaded */
               const char *dli_sname;  /* Name of symbol whose definition
                                          overlaps addr */
               void       *dli_saddr;  /* Exact address of symbol named
                                          in dli_sname */
           } Dl_info;
Ответ написан
@Fenrir89
find / -type f -name "file.so"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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