¿Cómo puedo encontrar la ruta completa del archivo con un nombre de biblioteca como libfoo.so.1?

Sin implementar un enlazador o usar ldd , ¿cómo puedo encontrar la ruta completa a una biblioteca? ¿Hay una biblioteca estándar disponible para eso en Linux? (POSIX tal vez?)

Al usar ldd y grep en un archivo que a sabiendas usa libGL.so.1 , se ve así:

 $ ldd /usr/bin/glxinfo | grep libGL libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f34ff796000) 

Dado un nombre de biblioteca como libGL.so.1 , ¿cómo puedo encontrar la ruta completa /usr/lib/libGL.so.1 ? . Preferiblemente, aceptar una opción para buscar bibliotecas de 32 y 64 bits. Si ninguna biblioteca hace eso, ¿existe un progtwig para hacer esto? Algo así como find-library-path libGL.so.1 . El comando locate libGL.so.1 no cuenta.

No quiero realmente cargar la biblioteca usando dlopen o algo así si ejecuta código de esa biblioteca.

Use ldconfig, que es la herramienta que administra el espacio de enlace.

La bandera -p permite navegar por todas las bibliotecas enlazables disponibles.

Ampliando la respuesta de Honky Tonk, el comando echo "$(ldconfig -p | grep libGL.so.1 | tr ' ' '\n' | grep /)" le dará la ruta solo.

Si no le importa realmente cargar la biblioteca y usar algunas funciones no estándar pero ampliamente disponibles, llamar a dladdr en cualquier símbolo de la biblioteca devolverá información que contenga la ruta de acceso completa que se cargó.

Para los sistemas con GNU libc y Python, lo siguiente es lo más cercano que encontré. Utiliza LD_DEBUG (descrito en la página man de ld.so(8) ).

 LD_DEBUG=libs python3 -c "import ctypes; ctypes.CDLL('libssl.so.1.0.0')" 2>&1 | \ grep -A 1000 "initialize program: python" | grep -A 3 "find library" 

La salida (para libssl.so.1.0.0 ) es la siguiente:

  15370: find library=libssl.so.1.0.0 [0]; searching 15370: search cache=/etc/ld.so.cache 15370: trying file=/lib/x86_64-linux-gnu/libssl.so.1.0.0 15370: 15370: find library=libcrypto.so.1.0.0 [0]; searching 15370: search cache=/etc/ld.so.cache 15370: trying file=/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 15370: