Comment suivre le chargement de la bibliothèque?

16

J'ai un programme qui dépend de la bibliothèque liée à libboost 1.67, qui est installée dans le système. Lorsque je le lance, j'ai une erreur qui libboost_system.so.1.58n'existe pas. LD_PRELOADet ne LD_LIBRARY_PATHsont pas réglés.

lddtreel'exécution ne montre pas cette bibliothèque comme une dépendance mais le lddfait.

Comment puis-je suivre d'où la bibliothèque est requise?

Alex
la source

Réponses:

16

Si sur un système GNU, essayez d'exécuter votre application avec:

LD_DEBUG=libs your-application

Voir LD_DEBUG=helppour plus d'options ou man ld.so.

Stéphane Chazelas
la source
quand j'essaye LD_DEBUG = libs python3.6 sur tcsh j'obtiens la commande LD_DEBUG non trouvée. Quelle est l'alternative tcsh?
gansub
1
@gansub préfixe la commande avec envdans tcsh
Stéphane Chazelas
6

Si le programme charge manuellement libboost_system à l'aide de dlopen (), vous pourrez peut-être trouver où il le fait en utilisant ltrace pour voir s'il appelle dlopen (), et peut-être gdb pour définir un point d'arrêt sur les appels à dlopen (), puis générer une trace de pile. (Voir aussi latrace .)

DW
la source