2009-07-13 5 views
0

Obtenir une erreur de liens sur osx (aucune erreur sur linux ou fbsd pour le même code):ld: symbole double _dbg_char

ld: duplicate symbol _dbg_char in .libs/liboekernel_la-OEK_get.o and .libs/liboekernel_la-OEK.o 

les 2 libs répertoriés dans l'erreur est à moi, mais le symbole est pas. C++ flint confirme que '_dbg_char' est dans les deux bibliothèques, mais je ne suis pas sûr de savoir d'où ça vient. Astuces, des stratégies, des réponses absolues pour la façon d'id _dbg_char serait grandement appréciée.

projet

utilise libtool/autotools et gcc 4.01

Répondre

1

Trouvé une macro de journalisation/débogage qui définissait dbg_char par' dbg_ ## t '. réparer était de le rendre statique. leçons apprises:

  1. osx ajoute un _ premier aux noms de symbole. il n'a pas été jusqu'à ce que je courais nm sur linux et ai vu le même symbole sans le _ que je pensais à rechercher le code de base pour « dbg_ » au lieu de « _dbg_ »
  2. osx avait raison de se plaindre
  3. ironie riche coupe -et-coller une macro de débogage que je n'ai pas entièrement compris m'a causé tant de problèmes
0

Vous pouvez vérifier si les deux libs #include un fichier d'en-tête qui déclarent _dbg_char mais manquer le mot-clé extern. Peut-être que c'est #ifdef 'sorti pour d'autres plates-formes donc vous ne rencontrez ce problème sur OS X.

+0

merci. J'ai couru trouver avec grep contre les fs entiers et n'ai pas trouvé _dbg_char dans mes fichiers ni. pommes * .h. encore en train de creuser ... – navicore