Bibliothèque partagée qui utilise une bibliothèque partagée symbole non défini

deux bibliothèques partagées liba.donc, et libb.. liba.utilise donc libb.. Tous les c, les fichiers sont compilés avec -fPIC. La liaison utilise partagés. Lorsque nous appelons dlopen sur liba.il ne peut donc pas trouver des symboles dans libb.donc...nous obtenons le "undefined symbol" erreur. Nous pouvons dlopen libb.donc, avec pas d'erreurs. Nous savons qu'il est de trouver libb parce que nous n'avons pas d'obtenir un fichier ne trouve pas d'erreur. Nous obtenons un fichier n'est pas trouvé d'erreur lorsqu'on les supprime libb.. Nous avons essayé -lutil et pas de chance.

Des idées????

oh ouais. gcc 4.1.2

mise à jour: Nous utilisons rpath lors de la liaison de liba afin de trouver libb.

ldd liba.donc retourne:

linux-gate.so.1 => (0xffffe000)  
libb.so => ./libb.so (0xf6ef9000)  <-------- LIBB 
libutil.so.1 => /lib/libutil.so.1 (0xf6ef5000)  
libdl.so.2 => /lib/libdl.so.2 (0xf6ef1000)  
libm.so.6 => /lib/libm.so.6 (0xf6ec9000)  
libpthread.so.0 => /lib/libpthread.so.0 (0xf6eb1000)  
librt.so.1 => /lib/librt.so.1 (0xf6ea8000)  
libc.so.6 => /lib/libc.so.6 (0xf6d62000)  
/lib/ld-linux.so.2 (0x007d0000)   

est-il significat qu'il n'existe pas .# à la fin de libb???

Vous dites: vous avez créé deux libs (-fPIC-partagée), liba.donc, et libb.. liba.donc, est dinamically un lien (ou il devrait être...) avec libb.donc, et l'utilise. Dans un programme X vous essayez de dlopen sur libb.donc, et tout est ok; un autre programme de test Y essaie de dlopen liba.si, mais il ne parvient pas, néanmoins, vous savez liba.donc trouve libb.afin de correctement depuis que vous avez essayé de supprimer libb.et un autre problème est soulevé... les options que vous utilisez pour dlopen?
Vous l'avez tous droit. Droit maintenant, nous n'utilisons pas d'options, parce que dlopen est appelée à partir d'un programme, nous n'avons aucun contrôle sur.
Ce n'commande ldd liba.so dire?
ldd dit libb.donc => ./libb.(0xf6ef9000), parmi d'autres choses. Toutes les autres lignes ont un supplément .# après le nom, comme "libutil..1 => /lib/libutil..1 (0xf6ef5000)." Est-il significat qu'il n'existe pas .# après libb.alors???
Dans ce cas, vous devez vérifier que le symbole de la définition - si elle est définie ou tout simplement déclaré

OriginalL'auteur johnnycrash | 2010-06-07