我在尝试使用 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 的东西很特别,我不知道有什么区别。我从字面上复制了该行并更改了文件名以创建另外两行失败的行。
所以,简而言之,帮助。我在 Windows XP 上使用 DJGPP 和 GCC,最后还有一个 python 脚本应该将所有东西联系在一起。(当项目是单个源文件时,这一切都有效,但尝试将文件拆分为单独的文件会导致这个奇怪的错误。)
谢谢。
PS:是的,我们使用的是批处理文件,我知道这会让你们中的一些人畏缩。但是,如果可能的话,我真的很想在继续使用 makefile 之前了解这个错误。^_^
编辑:接受的答案确实是我们的问题,尽管问题出在 DJGPP,而不是 Windows。(Windows 似乎没有命令限制。)解决方案是使用 MinGW 而不是 DJGPP 进行编译,这样可以立即解决问题。多谢你们!