2012-08-26 2 views
0

J'ai rencontré le problème suivant sous Linux. J'ai une application qui utilise une bibliothèque externe (l'application n'est pas liée avec). J'ouvre la bibliothèque par dlopen et utilise des symboles. Le problème s'est produit lorsque j'ai essayé de décharger la bibliothèque par dlclose, je vois toujours la bibliothèque chargée dans /proc/.../maps.La bibliothèque partagée ne peut pas être fermée par dlclose

Plus sur une tentative d'utilisation suivante:

... 
while(dlclose(module) == 0); 
... 

conduit à boucle infinie et la bibliothèque est encore chargée.

Y at-il un moyen de vérifier/trouver qui détient la bibliothèque?

+0

Vous ne devriez pas trop déranger. En fait, ne pas faire de 'dlclose' fonctionne très bien, même avec des milliers d'objets partagés' dlopen'-ed. –

Répondre

2

De « l'homme dlclose »:

The function dlclose() decrements the reference count on the dynamic 
library handle handle. If the reference count drops to zero and no 
other loaded libraries use symbols in it, then the dynamic library 
is unloaded. 

Vous êtes probablement aller à l'encontre de la « aucune autre bibliothèque n'utilisent des symboles » clause.

Votre meilleur pari est de courir avec LD_DEBUG=bindings, et voir quelles autres bibliothèques se lient à celle que vous voulez décharger.

Voir aussi this question.

Questions connexes