J'essaie d'utiliser un maquillage pour compiler un programme que quelqu'un d'autre a écrit, en utilisant Cygwin. Je reçois beaucoup de messages d'erreur, dont beaucoup de plaignant Après avoir effectué une recherche autour d'un peu, le problème est connecté à Est-ce que quelqu'un sait comment résoudre ce problème? J'aimerais m'asseoir et apprendre tout cela en détail, mais je n'ai pas le temps avant d'avoir besoin de ce programme. P> P> Erreur: Modèle avec CLAIGE C CODE>.
extern "C" < / code>. Cette ligne est contenue dans le fichier cygwin / usr / include / pthread.h em>, qui est incluse avec
#include
3 Réponses :
Ce problème se pose lorsque votre compilateur compilait un mélange de code C et C ++. La syntaxe externe "C" est un moyen de dire au compilateur C ++ qu'un compilateur C devra également accéder à cette fonction. Le compilateur C ne comprend pas cette utilisation de l'extérieur, si typiquement vous le cachez comme ceci: Cependant, vous ne devriez pas aller changer les en-têtes du système, les chances de ceux-ci mal sont très minces. Plus probablement, l'un de vos propres en-têtes manque le support de fermeture ci-dessus. P> p>
Edit: basé sur l'échange dans les commentaires, le coupable était un fichier d'en-tête dans le répertoire de construction (Endian.h) qui en conflit avec un système inclut le fichier /usr/include/endian.h. Il était inclus au lieu de l'en-tête du système et causant des problèmes de construction. Les dossiers étaient en conflit car l'affaire est insignifiante sur Windows. La cause fondamentale était ce qui a été suggéré dans la réponse originale. La construction externe C fuit dans le code C ++ involontairement, où des modèles ont été définis, provoquant l'erreur indiquée.
Je vérifierais une construction de liaison de "pendling" dans vos fichiers d'en-tête quelque part. Ce serait dans le code que vous avez écrit (pas l'un des en-têtes système; ceux-ci sont probablement sûrs). P>
code dans les en-têtes est enveloppé avec, p>
sur le dessus: p> < Pré> xxx pré>
et en bas: p> si la partie inférieure est manquante, l'effet de la moitié supérieure s'étend dans le code dans d'autres en-têtes involontairement. Cela provoque des problèmes tels que vous rencontrez. P> p>
@ Jonp.Harris L'étrange chose est, comme je l'ai mentionné, je n'ai pas écrit le code moi-même et je suis positif, cela fonctionne pour d'autres personnes. J'ai cherché le code que vous mentionnez dans les en-têtes, mais je ne peux pas le trouver jusqu'à présent. Cependant, je soupçonne que les auteurs utilisent Linux, tandis que j'utilise Windows et que Googling autour semble qu'il pourrait y avoir un problème avec Pthread et Cygwin sous Windows?
@Jorgen Ce que vous pouvez faire est de regarder la sortie prétraitée. Exécutez la commande Compiler comme c'est tout, mais remplacez l'option "-c" avec "-E". La sortie doit entrer dans un fichier spécifié avec l'option "-O". Regardez-le, et si vous aimez, Coller le fichier quelque part et post-lien ici (si vous voulez de l'aide).
Merci pour la suggestion! Le problème est que je regarde les maquillages que je ne comprends pas beaucoup de ce qui se passe, et je ne trouve pas le fichier mentionné qui inclut pthread.h i> et commence donc le problème ..
Vous pouvez simplement couper et coller la commande de la sortie de la sortie dans la coque et l'exécuter. La commande serait une invocation GCC qui devrait précéder les messages d'erreur. Cela devrait fonctionner aussi longtemps que vous êtes dans le bon répertoire.
Au fait, la dernière partie de la commande est "-e -o garbageflag.o garbageflag.cc", j'ai supposé que c'était le fichier .o que vous vouliez dire
Il semble y avoir un fichier nommé endian.h dans le répertoire dans lequel vous compilez. Il interfère avec votre construction. Le compilateur comprend ce fichier au lieu de la norme de / usr / include.
D'accord! À partir de l'apparence, les deux fichiers sont complètement différents (par la manière dont l'un dans mon répertoire est capitalisé, comme dans Endian.h, je suppose que cela n'aide pas). Je vais essayer de le renommer et changer partout, il est inclus.
J'ai renommé le fichier et il a supprimé l'erreur (bien qu'il n'y ait pas d'autres, je vais me couper les dents sur ceux suivants). Merci beaucoup! Je suppose qu'il n'y a aucun moyen d'accepter un commentaire comme une réponse?
Ah. La capitalisation est la raison pour laquelle cela fonctionne pour les autres personnes et pas vous. Sous Windows, l'affaire est insignifiante. Je peux éditer la réponse pour refléter cet échange. Ensuite, vous pouvez l'accepter.
Similarité avec la réponse acceptée, c'était un problème de nidification pour moi aussi, mais pas avec dans mon cas , cette erreur a été causée par des constructions fichier ah: p> fichier bh p> déplacer le ifdef / endif code>, donc je ajoute comme une référence pour les autres.
NOTED
EXTERT "C" CODE>; Un fichier d'en-tête contenant un
externe "c" code> construct a été inclus à l'intérieur d'un autre em>
extern "C" code> construction, causant la nidification confondue le compilateur / préprocesseur. p>
#include " bh " code> en dehors du
ah code>
extern" c " code> construire corrige le problème. p> p>
Nous ne pouvons pas beaucoup faire pour vous aider sans voir le code réel que vous essayez de compiler.
Ne modifiez pas
pthread.h code>, c'est très probablement juste, vous devez déterminer pourquoi vous obtenez l'erreur d'origine qui n'est probablement pas là. Premier candidat que je rechercherais sont des macros.