Ответ 1
Используйте ldconfig, который является инструментом, который управляет пространством ссылок.
Флаг -p
позволяет просматривать все доступные библиотеки.
Не внедряя компоновщик или используя ldd
, как я могу найти полный путь к библиотеке? Доступна ли стандартная библиотека для Linux? (Возможно, POSIX?)
Используя ldd
и grep
в файле, который сознательно использует libGL.so.1
, он выглядит так:
$ ldd /usr/bin/glxinfo | grep libGL
libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f34ff796000)
Учитывая имя библиотеки, например libGL.so.1
, как я могу найти полный путь /usr/lib/libGL.so.1
?. Предпочтительно прием опции для поиска 32-битных и 64-разрядных библиотек. Если библиотека не делает этого, существует ли программа для этого? Что-то вроде find-library-path libGL.so.1
. Команда locate libGL.so.1
не учитывается.
Я не хочу загружать библиотеку с помощью dlopen
или что-то еще, если она выполняет код из этой библиотеки.
Используйте ldconfig, который является инструментом, который управляет пространством ссылок.
Флаг -p
позволяет просматривать все доступные библиотеки.
Если вы не против загружать библиотеку и использовать некоторые нестандартные, но широко доступные функции, вызов dladdr
для любого символа из библиотеки возвращает информацию, содержащую полный путь, который был загружен.
Расширяясь в ответе на Honky Tonk, команда echo "$(ldconfig -p | grep libGL.so.1 | tr ' ' '\n' | grep /)"
предоставит вам только один путь.