14

我下载 了Ruben 的Cygwin GCC版本。

但是在运行时似乎无法编译任何文件

$ touch foo.c

$ gcc foo.c
gcc:错误:spawn:没有这样的文件或目录

作为一种解决方法,我发现这是可行的

i686-w64-mingw32-gcc foo.c
4

7 回答 7

18

我遇到了同样的问题,并通过安装 g++ 包和 gcc-core 解决了它

于 2016-06-30T08:10:45.040 回答
8

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

原来,在 /usr/bin 和 /bin 中有 gcc 的副本(至少,在我的安装中有)。

执行 /bin/gcc 失败并出现上述错误——我猜是由于错误假设的相对路径???

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

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

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

于 2013-11-27T20:42:43.343 回答
3

Ruben 的构建不是Cygwin GCC 包,而是在各种平台上运行但使用 MinGW-w64 工具链以本机 Windows 为目标的交叉编译器。

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

于 2013-05-19T23:25:45.490 回答
2

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

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

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

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

于 2013-05-18T16:59:25.627 回答
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

它工作正常。

于 2018-03-22T14:46:38.043 回答
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. 如果您位于根文件夹并尝试使用...

因此,您可以使用以下命令开始运行cygwin gcc:

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

..甚至:

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

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

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

e:/cyg/bin/gcc -flags
于 2017-03-04T08:25:53.170 回答
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 的试验,我不知道这种行为的实际原因。

于 2017-07-28T07:52:44.673 回答