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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top