J'ai une bibliothèque C++ et une application C++ essayant d'utiliser les fonctions et les classes exportées de la bibliothèque. La bibliothèque se construit correctement et l'application compile mais ne parvient pas à lier. Les erreurs je reçois suivre ce formulaire:GCC et ld ne peuvent pas trouver les symboles exportés ... mais ils sont là!
app-source file.cpp :(texte + 0x2fdb):. Undefined reference to `lib-namespace :: GetStatusStr (int) »
Classes dans la bibliothèque semblent être résolus très bien par le lieur, mais les fonctions libres et les données exportées (comme une table de recherche de cosinus) entraînent invariablement l'erreur ci-dessus.
J'utilise Ubuntu 8.04 (Hardy), et il est à jour avec les derniers paquets unbuntu.
La commande pour relier la bibliothèque est (avec d'autres bibliothèques enlevées):
g++ -fPIC -Wall -O3 -shared -Wl,-soname,lib-in-question.so -o ~/project/lib/release/lib-in-question.so
La commande de lier l'application est (avec d'autres bibliothèques enlevées):
g++ -fPIC -Wall -O3 -L~/project/lib/release -llib-in-question -o ~/project/release/app-in-question
Enfin, il apparaît (du mieux que je peux dire) que les symboles en question sont exportés correctement:
nm -D ~/project/lib/release/lib-in-question.so | grep GetStatusStr --> U _ZN3lib-namespace12GetStatusStrEi
Vous n'êtes pas nous donner assez d'informations; par conséquent, vous obtiendrez beaucoup de fausses suppositions. Vous avez probablement fait une simple erreur. Simplifiez le code nécessaire pour reproduire l'erreur au minimum. Puis postez-le avec les commandes shell réelles, et leur sortie, ce qui conduit à l'erreur. – ejgottl
"lib-namespace" n'est pas un espace de noms légal, quel est le nom du symbole? –