Seltsam gcc Fehler: Streu '\ NNN' in Programm
-
06-07-2019 - |
Frage
Das folgende Problem tauchte in meiner Open-Source-Bibliothek, und ich kann nicht herausfinden, was los ist.
Zwei meiner Benutzer (gcc) Compiler-Fehler, die wie folgt aussehen:
/home/someone/Source/src/._regex.cpp:1:1: warning: null character(s) ignored
/home/someone/Source/src/._regex.cpp:1: error: stray ‘\5’ in program
/home/someone/Source/src/._regex.cpp:1: error: stray ‘\26’ in program
/home/someone/Source/src/._regex.cpp:1: error: stray ‘\7’ in program
/home/someone/Source/src/._regex.cpp:1:5: warning: null character(s) ignored
/home/someone/Source/src/._regex.cpp:1: error: stray ‘\2’ in program
...
Ich kann diesen Fehler nicht reproduzieren; der Code kompiliert auf allen Maschinen fein ich getestet habe.
Googeln schien um zu zeigen, dass dies oft eine Folge von einer fremden Codierung oder seltsame Formatierung, aber ich lief die ganze Quelle durch einen Hex-Editor, und alle Zeichen sind entweder druckbaren ASCII (0x20 - 0x7E) oder Tab oder Neue Zeile. Das ist es.
Auch beiden Benutzer erfolgreich die vorherige Version der Bibliothek zusammengestellt; aber die bestimmte Datei in Frage (regex.cpp
) und seine Header-Dateien haben sich seit dieser Zeit verändert worden!
Bitte finden Sie unter hier für weitere Informationen, einschließlich Links den Code herunterladen, wenn Sie wollen. Aber ich würde mit nur einem Zeiger in einer möglichen Richtung glücklich sein.
Lösung
Baffe Boyois hat das Recht, allgemeine Antwort bekam -. Ihre CMake Regeln zu viel tun müssen
Auf MacOS X 10.5.8 (Leopard), erhalte ich:
Osiris JL: cmake ..
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/jleffler/tmp/yaml-cpp-0.2.3/build
Osiris JL: make
Scanning dependencies of target yaml-cpp
[ 2%] Building CXX object CMakeFiles/yaml-cpp.dir/src/._conversion.cpp.o
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1:1: warning: null character(s) ignored
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1: error: stray ‘\5’ in program
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1: error: stray ‘\22’ in program
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1: error: stray ‘\7’ in program
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1:5: warning: null character(s) ignored
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1: error: stray ‘\2’ in program
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1:7: warning: null character(s) ignored
/tmp/yaml-cpp-0.2.3/src/._conversion.cpp:1:17: warning: null character(s) ignored
...
Sie sollten die Dateien aufzulisten, die Sie zusammengestellt müssen; Sie sollten nicht nur alle und jeden kompilieren.
Das Problem scheint in CMakeLists.txt zu sein:
file(GLOB public_headers include/*.h)
file(GLOB private_headers src/*.h)
file(GLOB sources src/*.cpp)
Entweder die CMake GLOB ist ein bisschen zu begeistert (ich bin mit der Version 2.6-Patch 4) oder Sie können sich nicht leisten, es zu benutzen, während alle Ihre Kunden MacOS X verwenden.
Was die GLOB Erweiterung tut zum Einbinden von Dateien beginnend mit ‚‘ jemand ist reine Vermutung; Ich würde geneigt sein, es als ein Fehler in cmake zu betrachten.
Wie jedoch dieses Problem zu umgehen, ich bearbeiten CMakeLists.txt und bekam dies funktioniert:
file(GLOB public_headers include/[a-z]*.h)
file(GLOB private_headers src/[a-z]*.h)
file(GLOB sources src/[a-z]*.cpp)
Dies ist nicht die komplette Lösung: I in eine Fortsetzung des Problems mit dem Code lief im yaml-Leser-Verzeichnis. Ich veränderte die yaml-Leser / CMakeLists.txt Datei grundsätzlich auf die gleiche Art und Weise.
FWIW:
$ file ._*
._conversion.cpp: AppleDouble encoded Macintosh file
._exp.cpp: AppleDouble encoded Macintosh file
._map.cpp: AppleDouble encoded Macintosh file
._map.h: AppleDouble encoded Macintosh file
._node.cpp: AppleDouble encoded Macintosh file
._null.cpp: AppleDouble encoded Macintosh file
._ostream.cpp: AppleDouble encoded Macintosh file
._parser.cpp: AppleDouble encoded Macintosh file
._regex.cpp: AppleDouble encoded Macintosh file
._regeximpl.h: AppleDouble encoded Macintosh file
._scanner.cpp: AppleDouble encoded Macintosh file
._scanner.h: AppleDouble encoded Macintosh file
._scanscalar.cpp: AppleDouble encoded Macintosh file
._scanscalar.h: AppleDouble encoded Macintosh file
._sequence.cpp: AppleDouble encoded Macintosh file
._simplekey.cpp: AppleDouble encoded Macintosh file
._stream.cpp: AppleDouble encoded Macintosh file
._token.h: AppleDouble encoded Macintosh file
$ odx ._con*.cpp
0x0000: 00 05 16 07 00 02 00 00 4D 61 63 20 4F 53 20 58 ........Mac OS X
0x0010: 20 20 20 20 20 20 20 20 00 02 00 00 00 09 00 00 ........
0x0020: 00 32 00 00 00 79 00 00 00 02 00 00 00 AB 00 00 .2...y..........
0x0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
*
0x0050: 00 00 00 00 41 54 54 52 00 3C E0 2B 00 00 00 AB ....ATTR.<.+....
0x0060: 00 00 00 9C 00 00 00 0F 00 00 00 00 00 00 00 00 ................
0x0070: 00 00 00 00 00 00 00 01 00 00 00 9C 00 00 00 0F ................
0x0080: 00 00 17 63 6F 6D 2E 61 70 70 6C 65 2E 54 65 78 ...com.apple.Tex
0x0090: 74 45 6E 63 6F 64 69 6E 67 00 00 00 55 54 46 2D tEncoding...UTF-
0x00A0: 38 3B 31 33 34 32 31 37 39 38 34 8;134217984
0x00AB:
$
Eine seltsame Detail - einige der Dateien im Verzeichnis ‚src‘ nicht die Schattendateien haben. Wenn ich 'tar -tvf yaml-CPP-0.2.3.tar.gz', sehe ich die Dateien mit der Quelle geliefert werden:
Osiris JL: tar -tvf yaml-cpp-0.2.3.tar.gz
drwxr-xr-x beder/staff 0 2009-10-22 15:13:52 ./
-rw-r--r-- beder/staff 1750 2009-10-22 15:09:05 ./CMakeLists.txt
drwxr-xr-x beder/staff 0 2009-10-19 16:40:15 ./include/
-rw-r--r-- beder/staff 171 2009-09-06 13:41:54 ./include/._conversion.h
-rw-r--r-- beder/staff 1118 2009-09-06 13:41:54 ./include/conversion.h
-rw-r--r-- beder/staff 302 2009-07-29 15:25:23 ./include/crt.h
-rw-r--r-- beder/staff 2254 2009-10-19 16:40:14 ./include/emitter.h
-rw-r--r-- beder/staff 1660 2009-10-19 16:40:14 ./include/emittermanip.h
-rw-r--r-- beder/staff 171 2009-08-18 22:07:22 ./include/._exceptions.h
-rw-r--r-- beder/staff 5638 2009-08-18 22:07:22 ./include/exceptions.h
-rw-r--r-- beder/staff 765 2009-07-29 15:25:23 ./include/iterator.h
-rw-r--r-- beder/staff 444 2009-07-29 15:25:23 ./include/mark.h
-rw-r--r-- beder/staff 171 2009-09-06 12:25:12 ./include/._node.h
-rw-r--r-- beder/staff 3467 2009-09-06 12:25:12 ./include/node.h
-rw-r--r-- beder/staff 171 2009-09-15 20:54:20 ./include/._nodeimpl.h
...
-rw-r--r-- beder/staff 171 2009-07-29 21:28:26 ./include/._yaml.h
-rw-r--r-- beder/staff 321 2009-07-29 21:28:26 ./include/yaml.h
-rw-r--r-- beder/staff 167 2009-09-05 16:01:06 ./._install.txt
-rw-r--r-- beder/staff 652 2009-09-05 16:01:06 ./install.txt
-rw-r--r-- beder/staff 1073 2009-05-29 19:31:21 ./license.txt
drwxr-xr-x beder/staff 0 2009-10-22 14:49:11 ./src/
-rw-r--r-- beder/staff 1697 2009-08-24 16:28:46 ./src/aliascontent.cpp
-rw-r--r-- beder/staff 1171 2009-08-24 16:28:46 ./src/aliascontent.h
-rw-r--r-- beder/staff 112 2009-05-29 19:31:21 ./src/content.cpp
-rw-r--r-- beder/staff 1557 2009-08-24 16:28:46 ./src/content.h
-rw-r--r-- beder/staff 171 2009-09-06 13:31:56 ./src/._conversion.cpp
-rw-r--r-- beder/staff 2027 2009-09-06 13:31:56 ./src/conversion.cpp
...
So ist die miscreant Dateien werden mit dem Produkt TAR-Datei ausgeliefert. Du hast irgendwo infiziert -. Nicht sicher, wie
Andere Tipps
Die Fehler sind in ._regex.cpp
, nicht regex.cpp
. Dateien mit ._
starrend werden von MacOS automatisch generiert. Es scheint, Ihr Build-System alle Dateien mit der Endung CPP zu kompilieren versucht. Es soll wohl nicht kompiliert alles mit einem Punkt beginnen.
Könnte eine beschädigte Datei auf ihrem Teil sein.
Was ist auf der Linie 1 von _regex.cpp auf ihrem System.
Wenn es eine Download / Encoding Frage ist Sie sehen, was auf ihrem System in den Dateien ist, nicht das, was in Ihrer Code-Repository.
Stellen Sie sicher, dass Sie nur .o-Dateien in Ihrem Build-Verzeichnis haben. Ich hatte dieses Problem und die Ursache war ein Fehler in meinem Makefile (eigentlich war es eine scons Datei), die eine Quelldatei in einer C-Datei anstelle einer .o-Datei erstellt. Die resultierende Datei war eine binäre, aber ich gehe davon aus gcc es als C-Datei zu interpretieren versucht.
ich dies nur habe mit meinem c ++ Programm passieren, die ich machte. Das Problem trat auf, wenn ich die Formel für Doppel-Hashing aus einer PDF-Datei kopiert, das war
return (randomNumber % (tableSize - 2)) + 1;
ich durch war es der Modulo-Operator, aber es stellte sich heraus, die Codierung oder etwas zu sein, aber ich beschlossen, diese durch sie zu löschen und die Eingabe manuell.