Pergunta

O seguinte problema apareceu na minha biblioteca de código aberto, e eu não consigo descobrir o que está acontecendo.

Dois dos meus usuários têm (gcc) erros do compilador que se parecem com:

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

Eu não posso reproduzir esses erros; o código compila bem em todas as máquinas que eu testei.

pesquisando por aí parecia indicar que este é muitas vezes resultado de uma codificação estranha ou formatação estranha, mas eu corri toda a fonte através de um editor hexadecimal, e todos os personagens são ASCII, quer para impressão (0x20 - 0x7E), ou guia, ou nova linha. É isso.

Além disso, ambos os usuários compilado com sucesso a versão anterior da biblioteca; mas o arquivo particular em questão (regex.cpp) e seus arquivos de cabeçalho não foram modificados desde aquela época!

Por favor, veja aqui para mais detalhes, incluindo links para baixar o código, se quiser. Mas eu ficaria feliz com apenas um ponteiro em uma direção possível.

Foi útil?

Solução

Baffe Boyois tem a resposta geral direita -. Suas regras CEfectue deve estar fazendo muito

No MacOS X 10.5.8 (Leopard), eu recebo:

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

Você deve listar os arquivos que você precisa compilado; você não deve apenas compilar toda a gente.

O problema parece estar em CMakeLists.txt:

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

Ou o CMake GLOB é um pouco demasiado entusiasmado (estou usando a versão 2.6-patch 4) ou você não pode dar ao luxo de usá-lo enquanto qualquer um dos seus clientes estão usando MacOS X.

O que o GLOB está fazendo expandindo para incluir arquivos começando com '' é uma incógnita; Eu estaria inclinado a considerá-lo como um bug no cmake.

No entanto, como uma solução, eu editei CMakeLists.txt e tenho esse ao trabalho:

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

Esta não é a solução completa: eu corri para uma continuação do problema com o código no diretório yaml-reader. Eu modifiquei o arquivo yaml-reader / CMakeLists.txt basicamente da mesma forma.

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

Um detalhe estranho - alguns dos arquivos no diretório 'src' não tem os arquivos de sombra. Quando eu faço 'tar -tvf yaml-CPP-0.2.3.tar.gz', vejo os arquivos que estão sendo enviados com a fonte:

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

Assim, os arquivos do meliante estão sendo enviados com o arquivo tar do produto. Você tem algum lugar infectado -. Não sei como

Outras dicas

Os erros são no ._regex.cpp, não regex.cpp. Arquivos olhando com ._ são gerada automaticamente pelo MacOS. Parece suas tentativas de sistema de construção para compilar todos os arquivos que terminam com .cpp. Provavelmente não deve compilação qualquer coisa que começa com um ponto.

Pode ser um arquivo corrompido da sua parte.

O que está na linha 1 do _regex.cpp em seu sistema.

Se houvesse um download / codificação de problema que você vai ter que olhar para o que está nos arquivos no seu sistema, não o que está em seu repositório de código.

Certifique-se de que você só tem .o arquivos em seu diretório de construção. Eu tive esse problema e a causa foi um erro no meu Makefile (na verdade, era um arquivo scons) que construiu um arquivo de origem em um arquivo .c em vez de um arquivo .o. O arquivo resultante era um binário, mas eu estou supondo gcc tentou interpretá-lo como um arquivo .c.

Eu só tinha isso acontecer com o meu programa c ++ que eu estava fazendo. Isso ocorreu quando eu copiar a fórmula para dupla hash de um arquivo pdf, que era

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

I por ele foi o operador módulo, mas acabou por ser a codificação ou algo assim, mas eu resolvi isso por excluí-lo manualmente e digitá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top