但是在运行时似乎无法编译任何文件
$ touch foo.c $ gcc foo.c gcc:错误:spawn:没有这样的文件或目录
作为一种解决方法,我发现这是可行的
i686-w64-mingw32-gcc foo.c
但是在运行时似乎无法编译任何文件
$ touch foo.c $ gcc foo.c gcc:错误:spawn:没有这样的文件或目录
作为一种解决方法,我发现这是可行的
i686-w64-mingw32-gcc foo.c
我遇到了同样的问题,并通过安装 g++ 包和 gcc-core 解决了它
我在 Cygwin64 上遇到了同样的问题,解决方案与 PATH 相关..有点。
原来,在 /usr/bin 和 /bin 中有 gcc 的副本(至少,在我的安装中有)。
执行 /bin/gcc 失败并出现上述错误——我猜是由于错误假设的相对路径???
执行 /usr/bin/gcc 按预期工作!
就我而言,“问题”是我无意中将“/bin”注入到我的 PATH 环境变量中,导致 /bin/gcc 被执行,而不是 /usr/bin/gcc。从路径中删除“/bin”解决了这个问题。
仍然不清楚为什么在不同的地方有两个 gcc 二进制文件(看起来是相同的)......但也许 Cygwin 大师可以回答这个问题;或者也许我的安装只是 foo-barred。
Ruben 的构建不是Cygwin GCC 包,而是在各种平台上运行但使用 MinGW-w64 工具链以本机 Windows 为目标的交叉编译器。
无论如何,您都不应该在 Cygwin 上使用它们。如果要编译 Cygwin 可执行文件,请安装 gcc4 包;如果您想为 Windows 进行交叉编译,请安装 mingw64-i686-gcc(适用于 Win32)或 mingw64-x86_64-gcc(适用于 Win64)软件包。
Gcc 并不是真正的编译器。它是一个前端程序,可以协调任何必要的编译器、汇编器和链接器组件的执行。通常,这些其他程序是单独编译的程序。
所以,gcc 试图(有点)告诉你它找不到编译器。我想它需要在您的 PATH 或预期位置。
如果您从 Windows DOS 框中执行此操作,那么它肯定需要一个 Windows PATH 设置。
我喜欢安装 Cygwin,确保包含rxvt。此时,您可以配置一个纯 sh(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
它工作正常。
每当 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/gcc
cygwin 不会将其识别为有效路径,因为您正在上一个文件夹当没有文件夹可以上去时。
如上所述,这可以通过保持路径有效来解决:
e:/cyg/bin/gcc -flags
确保源文件扩展名是小写的(即 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 的试验,我不知道这种行为的实际原因。