我在尝试使用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
下面是我在尝试运行此代码时收到的错误消息。所有文件都在同一目录中,是的,路径变量设置正确:
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的一些东西很特别,我不知道有什么区别。我从字面上复制了这一行,并更改了文件名以创建其他两行失败的文件。
所以,简而言之,帮助。我在WindowsXP上使用了djgpp和gcc,最后还使用了一个python脚本,该脚本应该将所有内容捆绑在一起。(当项目是单个源文件时,这一切都有效,但尝试将文件拆分为单独的文件会导致这种奇怪的错误。)
谢谢。
PS:是的,我们
是
使用一个批处理文件,我知道这让你们中的一些人感到害怕。但是,如果可能的话,在转到makefile之前,我真的很想了解这个错误。^ ^ ^
编辑:接受的答案确实是我们的问题,虽然问题是与DJGPP,而不是Windows。(Windows似乎没有命令限制。)解决方案是使用mingw而不是djgpp进行编译,djgpp立即解决了这个问题。谢谢大家!