2010-11-02 5 views
0

Je charge une bibliothèque partagée d'un autre. Disons foo2.so de foo1.soRetour dlsym symbole non trouvé dans android après le retour réussi de dlopen

J'utilise dlopen suivi par dlsym

dlopen réussir avec manettes mais revient dlsym avec « symbole not found » erreur .J'ai utilisé dlerror pour imprimer l'erreur.

Ce sont les choses que j'ai essayées. Dans le fichier foo2.so .mk j'ai ajouté LOCAL_LDFLAGS + = -Wl, - export-dynamic.

J'ai vérifié le symbole dans foo2.so en utilisant nm et il est là.

Les deux modules sont en C, sauf un fichier emballage dans foo1.so qui est en C++, le fichier appelant se trouve dans C.

Quelqu'un peut-il suggérer si je manqué quelque chose. Je cours ceci sur l'émulateur androïde sur froyo.

Répondre

0

Je serais tenté de fouiller au niveau de l'implémentation et de vérifier les choses. Regardez dans/proc/PID #/maps et assurez-vous que les deux bibliothèques sont chargées. Objdump à la fois l'appelant et l'appelé et assurez-vous que le bit C++ n'a pas manqué le nom.

Utilisez-vous un indicateur RTLD_ approprié, et dlsym obtient-il un handle valide renvoyé par dlopen? Pouvez-vous créer (une version simplifiée de) les deux bibliothèques et tester un exécutable pour un bureau Linux ou Cygwin afin de vous assurer que ce que vous voulez faire est généralement réalisable - c'est-à-dire que le problème est spécifique à Android?

+0

Le code d'échantillon est entré en dessous de pHndl = dlopen (pTemp, RTLD_NOW); if ((err = dlerreur())! = NULL) { LOGE ("Erreur lors du chargement de la librairie partagée:% s", err); dlerror(); } dlsymRet = (OMX_PTR) dlsym (pHndl, pFuncNom); if ((err = dlerreur())! = NULL) { LOGE ("Symbole d'erreur introuvable:% s", err); } – Aslam

+0

il renvoie un handle valide. essayé aussi RTLD_LAZY. L'appelant et l'appelé résident tous les deux dans un fichier c. en ce qui concerne le fichier de carte, je dois vérifier dans le processus du lecteur multimédia. Ce code était workign parfaitement sur linux. Essayer de charger dynamiquement des composants openmax sur notre cœur. Besoin de vérifier l'identifiant du processus du lecteur multimédia. – Aslam

Questions connexes