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

问题描述 投票:0回答:7

我下载了 Ruben 的 构建 Cygwin GCC.

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

$ 触摸 foo.c

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

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

i686-w64-mingw32-gcc foo.c
gcc cygwin
7个回答
21
投票

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


8
投票

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

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

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

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

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

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


3
投票

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

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


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

效果很好。


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

因此,gcc 试图(某种程度上)告诉您它无法

找到编译器。 我想它需要位于您的路径上或预期的位置。

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

我喜欢

安装 Cygwin,确保包含 rxvt。 这时候你就可以配置纯sh(1)路径了,你的环境就比较文明了


1
投票
每当 cygwin cc 找不到所需文件时,就会出现此错误。

对于那些直接从 Windows shell

在 cygwin 的 bin 中运行内容的人来说,需要注意的一个问题是 Windows 允许您从命令行运行程序,如下所示: e:cyg/bin/gcc -flags

请注意,
e:

cyg
之间没有斜线。

因此,此命令将成功从 Windows shell

start

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

..甚至:

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,

1
投票
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 的实验,我不知道这种行为的真正原因。

© www.soinside.com 2019 - 2024. All rights reserved.