Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows XP上的GCC编译器错误_C_Gcc_Windows Xp_Batch File - Fatal编程技术网

Windows XP上的GCC编译器错误

Windows XP上的GCC编译器错误,c,gcc,windows-xp,batch-file,C,Gcc,Windows Xp,Batch File,我在尝试使用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 conso

我在尝试使用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'
C:\Simple\core>build.bat
C:\Simple\core>echo现在编译、组装和链接核心:
现在编译、组装和链接核心:
C:\Simple\core>nasm-f aout-o start.o start.asm
C:\Simple\core>gcc-Wall-O-fstrength-reduce-fomit帧指针-finline函数
选项-NOSTINC-fno内置-I./包括-c-o控制台.o控制台.c
系统无法执行指定的程序。
C:\Simple\core>gcc-Wall-O-fstrength-reduce-fomit帧指针-finline函数
tions-NOSTINC-fno内置-I./包括-c-o核心.o核心.c
C:\Simple\core>gcc-Wall-O-fstrength-reduce-fomit帧指针-finline函数
tions-NOSTINC-fno内置-I./包括-c-o系统.o系统.c
系统无法执行指定的程序。
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:没有这样的文件:没有这样的文件或目录(eNONT)
C:\Simple\core>echo完成!
完成!
C:\Simple\core>concat.py
回溯(最近一次呼叫最后一次):
文件“C:\Simple\core\concat.py”,第12行,在
以open(“core.bin”、“rb”)作为核心:
IOError:[Errno 2]没有这样的文件或目录:“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立即解决了这个问题。谢谢大家

行的长度为126个字符,其他行的长度分别为130和136个字符。问题是有127个字符的限制。我不知道如何解决这个问题,但也许make可以帮您解决这个问题?..

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

如前所述,DJGPP make(或Bash)甚至一个简单的响应文件都可以解决这个问题,所以这不是问题。就其功能而言,DJGPP仍然很好。(另请参见ELF端口或Japheth的HX模块。)

您的路径设置为什么?如果您将所有源文件移动到其他目录(不称为“core”)并在那里尝试,是否会得到不同的行为?我问这个问题是为了看看编译OK的一个.c文件与当前目录同名是否是巧合。让我畏缩的不是批处理文件,而是使用了DJGPP(GNU工具链的经典DOS端口)而不是更现代的MinGW(GNU工具链的Windows端口)。Jeremy Ruten的回答提到DOS命令行限制为127个字符……如果这是问题所在,那么make(如果是DJGPP的make)确实可以解决这个问题。看,这是2008年,有没有任何东西仍然有126个字符的命令行限制?当然,本机Win32程序不会。除非OP运行的是16位版本的DJGPP,否则我看不出答案。@Greg Hewgill:DJGPP始终是32位的,但它在操作系统上的几乎所有操作都是通过DOS调用完成的。DOS是16位的。事实上,DJGPP程序以一个16位存根开始,该存根调用DPMI以切换到32位模式,因此它们在Windows中看起来像16位DOS程序。在win32上,最大命令行为8k。在dos下是16KB,但这包括了所有环境变量的副本