我在一个master分支下编写了几个程序,我使用GNUmakefile编译。今天,在我创建了一个新分支v4.3,然后切换到新分支,然后编译之后,我收到以下错误消息:
lucerne:lucerne$ make primes
g++-mp-4.8 -std=gnu++0x -g -O2 -W -Wall -Wextra -MD -MF .deps/primes.d -MP -I. -c -o primes.o primes.cpp
In file included from primes.cpp:2:0:
./vector:1:1: error: stray '\317' in program
????_TEXT
^
./vector:1:1: error: stray '\372' in program
./vector:1:1: error: stray '\355' in program
./vector:1:1: error: stray '\376' in program
./vector:1:1: error: stray '\7' in program
./vector:1:6: warning: null character(s) ignored [enabled by default]
./vector:1:1: error: stray '\1' in program
./vector:1:1: error: stray '\3' in program
./vector:1:10: warning: null character(s) ignored [enabled by default]
./vector:1:1: error: stray '\200' in program
切换到master分支时收到相同的错误消息。但是,如果我将文件重命名为其他内容,例如" new_primes.cpp",则make file
不会导致任何问题。 GNUmakefile或prime.cpp都没有被修改过。我还没有安装任何额外的包。它也不是编辑器 - 我正在使用emacs和TextWrangler。是什么导致了这个问题?
答案 0 :(得分:3)
GCC生成的错误发生在源文件或本例中包含的文件是二进制文件时。通过创建具有单个包含到二进制文件(例如/ bin / ls)的源文件,可以轻松地再现这一点。使用:
创建stray.c#include "/bin/ls"
快速编译:
gcc -c stray.c
产生以下输出:
In file included from stray.c:1:0:
/bin/ls:1:1: error: stray '\177' in program
/bin/ls:1:1: error: stray '\2' in program
/bin/ls:1:1: error: stray '\1' in program
/bin/ls:1:1: error: stray '\1' in program
/bin/ls:1:8: warning: null character(s) ignored [enabled by default]
/bin/ls:1:1: error: stray '\2' in program
/bin/ls:1:18: warning: null character(s) ignored [enabled by default]
“vector”似乎是一个二进制文件。
有两种可能的原因可以解释:
我猜它是第二个。检查并确保在编译器包含路径中没有名为vector的二进制文件。