¿Cómo puedo rastrear la carga de la biblioteca?

16

Tengo un programa que depende de la biblioteca que está vinculada a libboost 1.67, que está instalada en el sistema. Cuando lo ejecuto, tengo un error que libboost_system.so.1.58no existe. LD_PRELOADy no LD_LIBRARY_PATHestán establecidos

lddtreela ejecución no muestra esta biblioteca como dependencia pero lddsí.

¿Cómo puedo rastrear desde donde se requiere la biblioteca?

Alex
fuente

Respuestas:

16

Si está en un sistema GNU, intente ejecutar su aplicación con:

LD_DEBUG=libs your-application

Ver LD_DEBUG=helppara más opciones o man ld.so.

Stéphane Chazelas
fuente
cuando intento LD_DEBUG = libs python3.6 en tcsh obtengo el comando LD_DEBUG no encontrado. ¿Cuál es la alternativa tcsh?
gansub
1
@gansub prefijo el comando con enven tcsh
Stéphane Chazelas
6

Si el programa está cargando libboost_system manualmente usando dlopen (), puede encontrar dónde está haciendo eso usando ltrace para ver si está llamando a dlopen (), y tal vez gdb para establecer un punto de interrupción en las llamadas a dlopen () y luego generando un seguimiento de la pila. (Ver también latrace .)

DW
fuente