gcc因spawn失败:没有这样的文件或目录

时间:2013-05-18 06:47:15

标签: gcc compiler-construction cygwin

我下载了 Ruben’s的构建 Cygwin GCC

然而,在运行时似乎无法编译任何文件

$ touch foo.c

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

作为一种解决方法,我发现这个工作

i686-w64-mingw32-gcc foo.c

7 个答案:

答案 0 :(得分:11)

我遇到了同样的问题,除了gcc-core

之外还安装了g ++软件包解决了这个问题

答案 1 :(得分:6)

我在Cygwin64上遇到了同样的问题,解决方案是PATH相关的...... kinda。

事实证明,/ usr / bin和/ bin中有gcc的副本(至少在我的安装中有)。

执行/ bin / gcc失败并出现上述错误 - 我猜是因为错误地假定了相对路径???

执行/ usr / bin / gcc按预期工作!

在我的情况下,“问题”是我无意中将“/ bin”注入到我的PATH环境变量中,导致/ bin / gcc被执行,而不是/ usr / bin / gcc。从路径中删除“/ bin”解决了问题。

还不清楚为什么在不同的地方有两个gcc二进制文件(看起来是相同的)......但也许Cygwin大师可以回答这个问题;或者我的装置只是foo-barred。

答案 2 :(得分:3)

Ruben的构建是 Cygwin GCC软件包,而是它们是在各种平台上运行但使用MinGW-w64工具链定位本机Windows的交叉编译器。

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

答案 3 :(得分:2)

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

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

如果从Windows DOS框执行此操作,则肯定需要Windows PATH设置。

我喜欢install Cygwin,确保包含 rxvt 。此时,您可以配置纯粹的sh(1)路径,并且您的环境更加文明。

答案 4 :(得分:1)

只要cygwin cc找不到所需文件,就会发生此错误。

对于那些在cygwin的bin中直接运行来自 Windows shell的东西,需要注意的是Windows允许你从命令行运行程序,如下所示:

e:cyg/bin/gcc -flags

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

所以这个命令会从Windows shell成功启动 cygwin gcc,但是在运行的中途它会因为{{1}的某些组件而错误输出}将使用输入gcc的第一个参数,与mingw不同,此不是cygwin gcc的有效路径

只需将命令更改为:

即可解决此问题
e:cyg/bin/gcc

请注意e:/cyg/bin/gcc -flags e:之间的斜杠。

类似的问题是由于Windows允许cyg之类的路径替代e:/../folder1。如果您位于根文件夹并尝试使用e:/folder1 up 另一个文件夹,则Windows不会出错。

所以你可以使用以下命令开始运行 cygwin gcc:

..

..甚至:

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

但是,它会在e:/../../../../../../../../../cyg/bin/gcc -flags 中途失败,因为cygwin gcc的某些组件会尝试使用命令输入本身的第一个参数运行gcc: error: spawn: No such file or directory,与mingw不同,gcc不被cygwin识别为有效路径,因为当没有文件夹可用时,你 up 一个文件夹。

如上所述,可以通过保持路径有效来解决这个问题:

e:/../cyg/bin/gcc

答案 5 :(得分: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的实验,我不知道这种行为的实际原因。

答案 6 :(得分:1)

当我尝试从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

它工作正常。