gcc编译出错提示:spawn: 没有那个文件或目录

17

我下载了RubenCygwin GCC

然而,运行后似乎无法编译任何文件。

$ touch foo.c

$ gcc foo.c
gcc: error: spawn: No such file or directory

作为一种解决方法,我发现这个有效:

i686-w64-mingw32-gcc foo.c
7个回答

21

我曾经遇到过同样的问题,并通过安装g++包来解决,除此之外还需要安装gcc核心包。


this should be in comment. - Usman Maqbool
那也可能是一个答案。帮助我解决了“spawn: no such file…”问题。 - approximatenumber
我得到了相同的 - 相当无用 / 误导性的错误消息。 在我的情况下,我已经更新了Cygwin g ++软件包,但没有更新gcc软件包。 因此,解决方案类似:将第二个软件包更新为相同版本。 - dvo
在我的电脑上使用Cygwin64和Netbeans 12.2可以正常工作。 - Rome

8
我在Cygwin64上遇到同样的问题,解决方案与PATH有关。
事实证明,在我的安装中,/usr/bin和/bin目录下都有gcc的拷贝。
执行/bin/gcc会失败,并出现上述错误——我猜测这是由于错误地假定了相对路径???
执行/usr/bin/gcc按预期工作!
在我的情况下,“问题”在于我不小心将“/bin”注入了我的PATH环境变量中,导致执行/bin/gcc而不是/usr/bin/gcc。从路径中删除“/bin”解决了这个问题。
仍然不清楚为什么有两个gcc二进制文件(看起来相同)在不同的位置……但也许Cygwin大师可以回答这个问题;或者可能是我的安装有问题。

值得注意的是,在您的路径上检查g ++pkg-config。根据安装说明,将检查CCCXXPKG_CONFIG。我之所以会出现这个错误,是因为我在路径中有一个MinGW版本的g ++,来自不同的安装,并且得到了相同的答案。 - Keith Prussing

3
Ruben的构建版本不是Cygwin GCC软件包,而是跨平台运行并使用MinGW-w64工具链目标为本机Windows的交叉编译器。

无论如何,您不应在Cygwin上使用它们。如果您想编译Cygwin可执行文件,请安装gcc4软件包;如果您想进行Windows上的交叉编译,请安装mingw64-i686-gcc(Win32)或mingw64-x86_64-gcc(Win64)软件包。


2

Gcc并不是真正的编译器。它是一个前端程序,协调必要的编译器、汇编器和连接器组件的执行。通常这些其他组件都是单独编译的程序。

所以,gcc正在尝试(有点)告诉你它找不到编译器。我猜它需要在你的PATH或预期位置上。

如果你是从Windows DOS框执行此操作,那么它肯定需要一个Windows PATH设置。

我喜欢安装Cygwin,并确保包括rxvt。这样一来,你就可以配置一个纯粹的sh(1)路径,你的环境就会变得更加文明。


1
这是关键。如果您在gcc命令中添加“-v”,您可能会看到它试图运行的实际工具(但找不到)。在我的情况下,我缺少cc1plus,我需要从cygwin中的g ++软件包安装它。 - Billy Charlton

2

当我尝试从cygwin安装目录中提取一些可执行文件并将它们复制到另一个位置时,我遇到了相同的错误。

strace向我显示了spawn未找到的文件:

/lib/gcc/x86_64-pc-cygwin/6.4.0/cc1.exe

当我将cc1.exe复制到相对位置时,出现了问题。
<dir with sh.exe and cpp.exe>/../lib/gcc/x86_64-pc-cygwin/6.4.0/cc1.exe

它正常运行。


1

确保源文件扩展名为小写(例如 main.c,而不是 main.C):

$ gcc -o main main.C
$ gcc: error: spawn: No such file or directory

$ gcc -o main main.c
$ # all good

这只适用于gcc给出的扩展名的情况,实际源文件可以使用任何大小写的扩展名。

解释:这是根据我使用cygwin和gcc的实验得出的结论,我不知道背后的原因。


1
每当Cygwin的cc找不到所需文件时,就会出现此错误。
对于那些直接从Windows shell中的Cygwin bin运行程序的人来说,需要注意的一个问题是,Windows允许您像这样从命令行运行程序:
e:cyg/bin/gcc -flags

请注意,e:cyg之间没有斜杠。

因此,这个命令可以成功地从Windows shell启动cygwin gcc,但是在运行过程中会出错,因为gcc的某些组件将使用输入e:cyg/bin/gcc的第一个参数,并且与mingw不同,这对于cygwin gcc来说不是有效的路径

只需将命令更改为以下内容即可解决此问题:

e:/cyg/bin/gcc -flags

注意e:cyg之间的斜杠。
类似的陷阱是由于Windows允许像e:/../folder1这样的路径作为e:/folder1的替代品。如果你在根文件夹并尝试使用..进入另一个文件夹,Windows不会给出错误提示。
因此,您可以使用以下命令开始运行cygwin gcc:
e:/../cyg/bin/gcc -flags

..or even:

e:/../../../../../../../../../cyg/bin/gcc -flags

然而,由于cygwin的某些组件会尝试使用命令输入本身的第一个参数来运行gcc,而不像mingw那样,cygwin中不会将e:/../cyg/bin/gcc识别为有效路径,因为当没有文件夹可以上升时,你正在向上移动一个文件夹,所以会在一半失败并显示错误信息:gcc: error: spawn: No such file or directory
与上述情况类似,这可以通过保持路径有效来解决:
e:/cyg/bin/gcc -flags

当您链接h文件时,是否可能出现这样的混乱?也就是说,C文件包括一个包含另一个文件的h文件。所有文件都使用相对路径。VS 2017可以正常工作并正确解析路径。然而,GCC失败了。 - Royi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接