Question

Le problème suivant est apparu dans ma bibliothèque open source et je ne peux pas comprendre ce qui se passe.

Deux de mes utilisateurs ont des erreurs de compilation (gcc) qui ressemblent à:

/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
...

Je ne peux pas reproduire ces erreurs. le code se compile bien sur toutes les machines que j'ai testées.

Googler semble indiquer que ceci est souvent le résultat d’un codage ou d’un formatage étrange, mais j’exécutais tout le code source dans un éditeur hexadécimal, et tous les caractères étaient soit imprimables, ASCII (0x20 - 0x7E), ou nouvelle ligne. C'est ça.

De plus, les deux utilisateurs ont compilé avec succès la version précédente 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 ce temps!

Veuillez consulter ici pour plus d'informations, notamment: des liens pour télécharger le code si vous le souhaitez. Mais je serais heureux avec juste un pointeur dans une direction possible.

Était-ce utile?

La solution

Baffe Boyois a la bonne réponse générale: vos règles de CMake doivent en faire trop.

Sur MacOS X 10.5.8 (Leopard), je reçois:

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
...

Vous devez répertorier les fichiers nécessaires à la compilation. vous ne devriez pas simplement compiler tout le monde.

Le problème semble être dans CMakeLists.txt:

file(GLOB public_headers include/*.h)
file(GLOB private_headers src/*.h)
file(GLOB sources src/*.cpp)

Soit le CMake GLOB est un peu trop enthousiaste (j'utilise la version 2.6-patch 4), soit vous n’avez pas les moyens de l’utiliser si aucun de vos clients n’utilise MacOS X.

Ce que GLOB est en train de développer en incluant les fichiers commençant par '.' est-ce que quelqu'un devine? Je serais enclin à le considérer comme un bug dans cmake.

Cependant, en guise de solution de contournement, j'ai édité CMakeLists.txt et je l'ai obtenu:

file(GLOB public_headers include/[a-z]*.h)
file(GLOB private_headers src/[a-z]*.h)
file(GLOB sources src/[a-z]*.cpp)

Ce n'est pas la solution complète: j'ai rencontré une continuation du problème avec le code dans le répertoire yaml-reader. J'ai modifié le fichier yaml-reader / CMakeLists.txt de la même manière.

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:
$

Un détail étrange - certains fichiers du répertoire "src" ne contiennent pas les fichiers shadow. Quand je fais 'tar -tvf yaml-cpp-0.2.3.tar.gz', je vois les fichiers expédiés avec la source:

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
...

Ainsi, les fichiers malveillants sont expédiés avec le fichier tar du produit. Vous avez été infecté quelque part - vous ne savez pas comment.

Autres conseils

Les erreurs sont dans ._ regex.cpp , pas regex.cpp . Les fichiers commençant par ._ sont automatiquement générés par MacOS. Il semble que votre système de compilation tente de compiler tous les fichiers se terminant par .cpp. Il ne devrait probablement pas compiler quoi que ce soit commençant par un point.

Pourrait être un fichier corrompu de leur part.

Que trouve-t-on sur la ligne 1 de _regex.cpp sur LEUR système?

S'il y avait un problème de téléchargement / codage, vous devrez examiner le contenu des fichiers de leur système, pas celui de votre référentiel de code.

Assurez-vous de n’avoir que des fichiers .o dans votre répertoire de construction. J'avais ce problème et la cause était une erreur dans mon Makefile (en fait, c'était un fichier scons) qui avait construit un fichier source dans un fichier .c au lieu d'un fichier .o. Le fichier résultant était un fichier binaire, mais je suppose que gcc a tenté de l'interpréter en tant que fichier .c.

Je viens de vivre cela avec mon programme c ++ que je réalisais. Cela s'est produit lorsque j'ai copié la formule de double hachage à partir d'un fichier pdf, ce qui était

return (randomNumber % (tableSize - 2)) + 1;

J'ai été opérateur modulo, mais il s’est avéré qu’il s’agissait de l’encodage, mais j’ai résolu ce problème en le supprimant et en le tapant manuellement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top