2008-10-19 144 views
2

尝试编译使用GCC的C程序时,出现完全bizzare错误。以下是我正在使用的批处理文件:Windows XP上的GCC编译器错误

echo Now compiling, assembling, and linking the core: 
nasm -f aout -o start.o start.asm 

gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -I./include -c -o consoleio.o consoleio.c 
gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -I./include -c -o core.o core.c 
gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions -nostdinc -fno-builtin -I./include -c -o system.o system.c 

ld -T link.ld -o core.bin start.o core.o system.o consoleio.o 
echo Done! 

concat.py 

pause 

以下是我在尝试运行此代码时收到的错误消息。所有的文件都在同一目录中,是PATH变量设置正确:现在

C:\Simple\core>build.bat 

C:\Simple\core>echo Now compiling, assembling, and linking the core: 
Now compiling, assembling, and linking the core: 

C:\Simple\core>nasm -f aout -o start.o start.asm 

C:\Simple\core>gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-func 
tions -nostdinc -fno-builtin -I./include -c -o consoleio.o consoleio.c 
The system cannot execute the specified program. 

C:\Simple\core>gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-func 
tions -nostdinc -fno-builtin -I./include -c -o core.o core.c 

C:\Simple\core>gcc -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-func 
tions -nostdinc -fno-builtin -I./include -c -o system.o system.c 
The system cannot execute the specified program. 

C:\Simple\core>ld -T link.ld -o core.bin start.o core.o system.o consoleio.o 
c:/djgpp/bin/ld.exe: system.o: No such file: No such file or directory (ENOENT) 

C:\Simple\core>echo Done! 
Done! 

C:\Simple\core>concat.py 
Traceback (most recent call last): 
    File "C:\Simple\core\concat.py", line 12, in <module> 
    with open("core.bin", "rb") as core: 
IOError: [Errno 2] No such file or directory: 'core.bin' 

,有趣的是gcc的命令,这是我遇到的问题。 (其他问题似乎是从这个级联。)编译core.c时,GCC命令工作得很好,并且按预期生成一个.o文件。当试图编译system.c或consoleio.c时,GCC失败,但以一种非常意外的方式:看起来好像windows不能运行程序。这让我感觉到。我已经尝试了许多东西,包括在窗口外自己运行这些命令。关于core.c的一些东西很特别,我无法弄清楚它们有什么不同。我从字面上复制了该行,并更改了文件名以创建其他两行失败的行。

因此,总之,帮助。我在Windows XP上使用DJGPP和GCC,并在最后使用python脚本将所有内容连接在一起。 (当项目是单个源文件时,这一切都奏效,但试图将文件分割成单独的文件导致了这个奇怪的错误。)

谢谢。

PS:是的,我们使用批处理文件,我知道这让你们有些畏缩。不过,如果可能的话,我真的很想理解这个错误,然后再转向makefile。^_^

编辑:被接受的答案确实是我们的问题,虽然问题与DJGPP,而不是Windows。 (Windows似乎没有命令限制。)解决方案是使用MinGW而不是DJGPP进行编译,后者立即解决了该问题。多谢你们!

+0

您的路径设置为?如果将所有源文件移动到其他目录(不称为“核心”)并尝试在那里,你会得到不同的行为吗?我问这是否是一个巧合,编译OK的一个.c文件恰好与当前目录具有相同的名称。 – 2008-10-19 03:11:53

+0

什么让我感到不安是批处理文件,是使用DJGPP(GNU工具链的经典DOS端口)而不是更现代的MinGW(GNU工具链的Windows端口)。 Jeremy Ruten的回答中提到了127个字符的DOS命令行限制...... – CesarB 2008-10-19 03:20:10

回答

5

工作的行长度为126个字符,其他行长度为130和136个字符。问题是有127个字符的限制。我不知道如何解决这个问题,但也许使会解决它吗?...

0

添加-v到gcc命令行。 gcc实际上是一个驱动程序,它运行其他几个辅助程序(传统上,预处理程序,编译程序和汇编程序); -v使它在执行时显示它们的命令行,并启用详细模式。有了这个,你可以看到它失败的地方。

0

如前所述,DJGPP make(或Bash)甚至简单的响应文件可以解决这个问题,所以这不是问题。 DJGPP的功能仍然很棒。 (请参阅ELF端口或Japheth的HX mod。)