我在尝试使用GCC编译C程序时遇到了一个完全不好的错误。这是我正在使用的批处理文件:
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的一些东西很特别,我无法弄清楚它们之间的区别。我确实复制了那一行并更改了文件名以创建另外两行失败的行。
所以,简而言之,HELP。我在Windows XP上使用DJGPP和GCC,最后还有一个python脚本应该将所有内容组合在一起。 (当项目是单个源文件时,这一切都有效,但是尝试将文件拆分为单独的文件会导致这种奇怪的错误。)
感谢。
PS:是的,我们 使用批处理文件,我知道这让你们有些畏缩。但是,如果可能的话,我真的很想了解这个错误,然后再转到makefile。 ^ _ ^
编辑:接受的答案确实是我们的问题,虽然问题出在DJGPP上,而不是Windows上。 (Windows似乎没有命令限制。)解决方案是使用MinGW编译而不是DJGPP,它立即修复了问题。谢谢你们!答案 0 :(得分:5)
有效线路长126个字符,其他线路长130个,长136个字符。问题是有127个字符的限制。我不确定如何解决这个问题,但也许 make 会为你解决这个问题?...
答案 1 :(得分:0)
将-v添加到gcc命令行。 gcc实际上是一个驱动程序,它运行其他几个辅助程序(tradicionally,预处理程序,编译器和汇编程序); -v使它在执行时显示其命令行,并且还启用详细模式。有了这个,你可以看到失败的地方。
答案 2 :(得分:0)
如前所述,DJGPP make(或Bash)甚至是一个简单的响应文件都可以解决这个问题,所以这不是问题。 DJGPP仍然很好,只要它的功能。 (P.S。另见ELF端口或Japheth的HX mod。)