2010-02-19 7 views
2

Étant donné une chaîne d'outils C++/GNU, quelle est une bonne méthode ou outil ou stratégie pour résoudre les erreurs de l'éditeur de liens?Comment gérer les erreurs de l'éditeur de liens dans la chaîne d'outils C++/GNU?

+0

quel genre d'erreur de l'éditeur de liens? et sur Linux je suppose? –

+0

Je ne suis pas sûr de ce que vous obtenez .. vous devez corriger votre code ou les paramètres de compilation/compilateur. – leeeroy

+0

@Hassan: Je cherche plutôt une méthode générale plutôt qu'une recommandation spécifique. –

Répondre

1

Avec toolchain gcc, j'utilise:

  • nm: trouver les symboles dans les fichiers objet
  • ld: trouver comment un des liens de la bibliothèque
  • C++ filt: pour trouver le nom C++ d'un symbole à partir de son nom tronqué

Vérifiez this pour plus de détails.

+0

nm -u pour les symboles non définis seulement – coelhudo

0

Examinez les noms des symboles signalés comme étant problématiques.

  • S'il y a des symboles manquants signalés, savoir dans quel fichiers source ou des bibliothèques les fonctions/... doit être définie. Vérifiez la compilation/paramètres de l'éditeur de liens pour savoir pourquoi ces fichiers ne sont pas compilés ou liés .
  • S'il existe des symboles à plusieurs définitions, l'éditeur de liens mentionne généralement les fichiers d'objets ou les bibliothèques qui les contiennent. Regardez ces fichiers/leurs sources pour savoir pourquoi les fonctions incriminées/... sont incluses dans les deux.
2

Je ne sais pas exactement ce que vous voulez dire, mais si vous parlez des symboles de l'éditeur de liens énigmatiques comme:

mylib.so: non défini symbole: _ZN5CandyD2Ev

vous pouvez utiliser C++ filt faire Puzzling pour toi.

C++ filt _ZN5CandyD2Ev

retournera Bonbons :: ~ Candy() donc en quelque sorte le destructeur de Candy ne se relier.

1

Eh bien, la première chose serait RTFM. Non, sérieusement, lisez la documentation.

Si vous ne voulez pas faire cela, essayez une recherche sur l'erreur qui survient.

Voici quelques autres points à retenir: les symboles «manquants» indiquent souvent que vous n'avez pas inclus la source ou la bibliothèque appropriée; les symboles "manquants" sont parfois une indication que vous essayez de lier une bibliothèque créée avec une convention de mangling différente (ou un compilateur différent); assurez-vous que vous avez extern "C", le cas échéant; déclarer et définir ne sont pas la même chose; Si votre compilateur ne supporte pas "export" assurez-vous que votre code de template est disponible lorsque vous instanciez des objets.

+0

S'il y avait quelque chose qui approchait de la documentation, je ne serais pas dans ce pétrin ... Votre conseil aide, cependant. –

+0

Heureux d'aider du tout, désolé pour le manque de docs. :( –

Questions connexes