2009-12-16 16 views
0

Ce n'est pas aussi naïf que le titre peut vous amener à penser.Erreur "Référence indéfinie" De ld

Je reçois une erreur "Undefined Reference" de l'éditeur de liens/ld pour un couple de symboles de fonction dans la bibliothèque partagée tierce, que j'essaye de lier avec mon exécutable. La partie étrange est que cette bibliothèque elle-même est supposée contenir la définition des symboles incriminés en question.

La partie étrange est qu'il y a plusieurs exécutables dans mon projet, avec certains face à ce problème et d'autres non.

Ai-je foiré mes drapeaux gcc/ld ou est-ce autre chose?

+0

"Ai-je foiré mes drapeaux gcc/ld ou est-ce autre chose?" La réponse à cette question est "oui". S'il vous plaît, fournissez plus de détails. –

Répondre

1

Impossible de dire de votre description, qui contient environ zéro information utile. Une possibilité est que vous n'incluez pas le fichier d'en-tête correct dans certains fichiers source.

0

Avez-vous vérifié votre commande de lien? Cela est devenu plus strict dans les versions récentes de GCC.

Par exemple, un problème commun est causé en faisant ceci:

g++ -lX11 -lSuperLibrary awesomeApp.cpp 

au lieu de ceci:

g++ awesomeApp.cpp -lX11 -lSuperLibrary 

Il importe aussi quel ordre les drapeaux bibliothèque sont, si elles sont interdépendantes.

Il existe des indicateurs pour effectuer une multi-passe de bibliothèque, ce qui peut vous aider à résoudre votre problème. Pour la même que ci-dessus mais avec l'éditeur de liens « regroupement » des bibliothèques et de faire un lien récursif sur eux (à un coût de performance de linker), vous pouvez faire quelque chose comme ce qui suit:

g++ awesomeApp.cpp -Wl,--start-group -lX11 -lSuperLibrary -Wl,--end-group 

-Wl,<option> passe une option au lieur ... dans ce cas --start-group et --end-group.

Une grande analogie pourquoi l'ordre de lien est important est here

J'espère que cela aide.