Как найти полный путь к файлу с именем библиотеки, например libfoo.so.1?

Не внедряя компоновщик или используя 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 или что-то еще, если она выполняет код из этой библиотеки.

Ответ 1

Используйте ldconfig, который является инструментом, который управляет пространством ссылок.

Флаг -p позволяет просматривать все доступные библиотеки.

Ответ 2

Если вы не против загружать библиотеку и использовать некоторые нестандартные, но широко доступные функции, вызов dladdr для любого символа из библиотеки возвращает информацию, содержащую полный путь, который был загружен.

Ответ 3

Расширяясь в ответе на Honky Tonk, команда echo "$(ldconfig -p | grep libGL.so.1 | tr ' ' '\n' | grep /)" предоставит вам только один путь.