9
votes

Code C compilé avec C ++: référence non définie

J'ai un petit programme que je peux compiler avec GCC et ICC sans aucune difficulté, mais j'aimerais également que le code fonctionne avec G ++ et ICPC. J'ai essayé d'ajouter ceci: xxx

au début et ceci: xxx

à la fin de tous les fichiers d'en-tête, mais je reste Obtenez plusieurs `une référence non définie à" ... "" erreurs "


3 commentaires

Première pensée: est défini __cplusplus?


Oui, il est défini par C ++ compilateurs (ou au moins, ceux que j'utilise)


Dupliqué possible de Question de débutant: Quand utiliser extern "C" {// code}?


4 Réponses :


8
votes

Je pense que vous êtes faux ... L'externe C est destiné à désactiver la fonction de mangling; Donc, si vous le faites uniquement pour les fichiers d'en-tête, lorsque vous essayez de relier votre code objet mangelé, les noms de fonction déclarés ne correspondent pas aux noms de fonction dans le fichier d'objet.

Quoi qu'il en soit, l'extérieur C ajoutez une portabilité si l'application complète est compilée et liée au même compilateur C ++, il est destiné à mélanger les bibliothèques C avec C ++ Code.

Si votre code se trouve dans le sous-ensemble commun de C et C ++, vous devriez déjà être en mesure de le compiler avec un compilateur, mais je ne peux pas voir la raison pour le faire (en plus de travailler sur le principe de la moins surprise, car c ++ est plus strict avec certaines choses).


0 commentaires

2
votes

Vous obtenez des références indéfinies car la déclaration et la définition ne correspondent pas si vous mettez externe "c" , ce qui empêche le nom Mangling de se produire: mais dans ce cas, cela ne se passe que dans vos fichiers d'en-tête .


0 commentaires

1
votes

Si l'une des références non définies est GXX_Personalalité, je dirais que le message de "Fortran" est correct.


1 commentaires

Rien à propos de GXX_Personalalité, je n'ai que des références non définies pour deux fonctions assez simples. L'une des "fonctions non définies" est dans le fichier "A.H / A.C" et peut être utilisée correctement dans ces fichiers, mais pour une raison quelconque ne fonctionne pas dans le fichier "B.C".



1
votes

Voir ma réponse à cette question précédente: quand utiliser extern " C "en mots simples?

Il convient d'espérer que cela précise comment mélanger le code C et C ++.


0 commentaires