Étrange gcc error: stray '\NNN' dans le programme
Le problème suivant a surgi dans ma bibliothèque open source, et je ne peux pas comprendre ce qu'il se passe.
Deux de mes utilisateurs ont (gcc) des erreurs de compilation qui ressemblent à:
/home/someone/Source/src/._regex.cpp:1:1: warning: null character(s) ignored
/home/someone/Source/src/._regex.cpp:1: error: stray ‘’ in program
/home/someone/Source/src/._regex.cpp:1: error: stray ‘6’ in program
/home/someone/Source/src/._regex.cpp:1: error: stray ‘’ in program
/home/someone/Source/src/._regex.cpp:1:5: warning: null character(s) ignored
/home/someone/Source/src/._regex.cpp:1: error: stray ‘’ in program
...
Je ne peux pas reproduire ces erreurs; le code se compile correctement sur toutes les machines que j'ai testé.
Googler autour semblait indiquer que ce qui est souvent le résultat d'une étrange codage ou la mise en forme étrange, mais j'ai couru tous les source par l'intermédiaire d'un éditeur hexadécimal, et tous les personnages sont soit ASCII imprimables (0x20 - 0x7E), ou un onglet, ou retour à la ligne. C'est tout.
Aussi, les deux utilisateurs compilé avec succès de la précédente version de la bibliothèque; mais le fichier en question (regex.cpp
) et ses fichiers d'en-tête n'ont pas été modifiés depuis cette époque!
Veuillez voir ici pour plus de détails, y compris les liens pour télécharger le code si vous le souhaitez. Mais je serais heureux avec un pointeur dans une direction possible.
- S'il vous plaît!!! LIRE la Version du Logiciel HOWTO (en.tldp.org/HOWTO/Software-Release-Practice-HOWTO/index.html) - vous toujours déballer des trucs dans un sous-répertoire (yaml-rpc-0.2.3) et de ne pas disperser votre code autour du répertoire courant...Zut! (OK: je devrais le savoir mieux, mais vous devriez en faire autant!)
- Désolé, vous avez raison. Je suis juste tellement l'habitude de se faire défoncer par d'autres de cette façon que je le fais toujours un nouveau répertoire de toute façon lors de la décompression. Mais ouais, désolé, je vais corriger ça pour la prochaine fois. Merci pour le lien, trop.
- ne pas accepter d'être vissé par d'autres de cette façon. Tolérer qu'une fois, souligner l'erreur de leurs manières à eux, et de refuser ensuite plus rien avoir à faire avec un logiciel qui ne traitent pas le problème.
Vous devez vous connecter pour publier un commentaire.
Baffe Boyois a obtenu le droit de réponse générale - votre CMake règles doivent être d'en faire trop.
Sur MacOS X 10.5.8 (Leopard), j'obtiens:
Vous devriez liste les fichiers dont vous avez besoin compilé; vous ne devriez pas simplement de compiler tout le monde.
Le problème semble être dans CMakeLists.txt:
Le CMake GLOB est un peu trop enthousiaste (j'utilise la version 2.6-patch 4) ou vous ne pouvez pas se permettre de l'utiliser alors que l'un de vos clients à l'aide de MacOS X.
Ce que la BOULE est en train de faire de l'expansion pour inclure les fichiers commençant par '.' je vous laisse deviner; je serais enclin à le considérer comme un bug dans cmake.
Cependant, comme une solution de contournement, j'ai édité CMakeLists.txt et a obtenu ce travail:
Ce n'est pas la solution complète: j'ai couru dans la continuation du problème avec le code dans le fichier yaml-lecteur de répertoire. J'ai modifié le yaml-reader/CMakeLists.txt fichier en gros de la même manière.
FWIW:
Un étrange détail de certains des fichiers dans le 'src' annuaire n'ont pas l'ombre de fichiers. Quand je fais "tar-tvf yaml-cpp-0.2.3.tar.gz', je vois que les fichiers sont livrés avec la source:
Donc le coupable fichiers sont fournis avec le produit fichier tar. Vous avez été infecté quelque part - pas sûr de savoir comment.
._whatever.cpp
fichiers générés?Les erreurs sont dans
._regex.cpp
, pasregex.cpp
. Fichiers regarder avec._
sont générés automatiquement par MacOS. Il semble que votre système de build essaie de compiler tous les fichiers se terminant par .rpc. Il ne devrait probablement pas à compiler tout ce qui commence par un point.Pourrait être un fichier corrompu sur leur partie.
Ce qui est sur la ligne 1 de _regex.cpp sur LEUR système.
Si il y avait un téléchargement /problème de codage, vous aurez à regarder ce qui est dans les fichiers sur leur système, non pas ce qui est dans votre code référentiel.
Assurez-vous que vous avez seulement .o les fichiers dans votre répertoire de construction. J'ai eu ce problème et la cause a été une erreur dans mon Makefile (en fait c'était un scons fichier) qui a construit un fichier source à un .c fichier au lieu d'un .o fichier. Le fichier obtenu est un fichier binaire, mais je suis en supposant que gcc essayé de l'interpréter comme une .c fichier.
J'ai juste eu cela se produise avec mon programme en c++ que je faisais. Cela s'est produit lorsque j'ai copié la formule de la double hachage à partir d'un fichier pdf, ce qui a été
Je travers la c'est l'opérateur modulo, mais il s'est avéré être l'encodage ou quelque chose, mais j'ai résolu ce problème en supprimant manuellement et de le taper.