CreateProcess:没有这样的文件或目录
Posted
技术标签:
【中文标题】CreateProcess:没有这样的文件或目录【英文标题】:CreateProcess: No such file or directory 【发布时间】:2011-04-20 09:17:09 【问题描述】:每当我尝试在其安装目录 (E:\MinGW\bin
) 之外运行 GCC 时,我都会收到此错误。
所以,假设我在E:\code
并且有一个名为one.c
的文件。跑步:
gcc one.c -o one.exe
会给我这个错误:
gcc: CreateProcess: No such file or directory
唯一的解决方法是导航到它的安装目录,从那里运行 gcc,然后指定所有其他路径。我的环境变量Path
包含E:\MinGW\bin
。
有解决此问题的建议吗?我正在运行 Windows XP SP3。
【问题讨论】:
在使用 windows 环境变量 GUI 出现此错误后,您是否将其添加到路径中?如果你这样做了,并且你试图在你最初使用的同一个命令 shell 中运行 gcc,它就不会工作。该 shell 有自己的 PATH 副本,当您使用 GUI 时没有更改。您可以通过在命令 shell 中键入 echo %PATH% 来看到这一点。解决此问题的最快方法是注销并重新登录。 啊,我想只要生成一个新的 CMD.exe 实例就足以让它使用新的“PATH”变量。但是,现在我已经尝试注销并登录,它工作正常,它似乎工作正常。谢谢! 如果您将临时目录环境变量更改为名称中没有空格的目录,则可以修复它 【参考方案1】:根据Code::Blocks wiki,您需要将C:\MinGW\libexec\gcc\mingw32\MinGW-Version
添加到您的PATH
。无需重启,但需要打开另一个终端才能获取最新的PATH
设置。
对于 MinGW-w64,即<mingw install directory>\libexec\gcc\x86_64-w64-mingw32\4.7.0\
【讨论】:
不...对我一点帮助都没有。 这也是我的问题。我正在使用 64 位 gcc(mingw64 项目)。添加PATH
解决了这个问题。 ProcMon 在诊断方面非常有帮助。
如果有人不知道怎么做,解释here。【参考方案2】:
我有一个类似的问题,由于没有安装 C++ 编译器。在我的例子中,我正在为 Python 扩展编译 .cpp 文件,但编译器首先被调用为 c:\mingw\bin\gcc.exe。
在内部,gcc.exe 会注意到它被要求编译一个 .cpp 文件。它会尝试调用 g++.exe 并失败并显示相同的错误消息:
gcc.exe: CreateProcess: 没有这样的文件或目录
【讨论】:
Luis Bruno 的回答解决了我的问题。确保您安装了正确的编译器。我正在尝试使用 gcc.exe 编译 .cpp 文件,而实际上需要 g++。 mingw-get install g++ 清除了错误。【参考方案3】:我刚遇到这个问题。
在我的情况下,问题是由于下载 GCC 软件包时出现的问题。 mingw-get 程序认为它完成了下载,但它没有。
我想升级 GCC,所以我使用了 mingw-get 来获取更新的版本。出于某种原因,mingw-get 认为特定文件的下载已完成,但事实并非如此。当它去提取文件时,我猜它发出了一个错误(我什至都懒得看——我只是跑了“mingw-get update && mingw-get install mingw32-gcc”并将它留在那里)。
为了解决这个问题,我通过执行“mingw-get remove mingw32-gcc”删除了 gcc,还删除了位于 mingw 缓存文件夹中的包文件(一个 mingw-get 没有完全下载)(“C: \MinGW\var\cache\mingw-get\packages”),然后再次运行安装命令。它下载并安装了 GCC 的缺失部分(它没有完全下载包 gcc-core)。
这解决了我的问题。
有趣的是,即使在我删除了缓存文件夹中的包文件并删除了包 mingw32-gcc 之后,mingw-get 也足够聪明,可以继续下载 gcc-core。
我认为更根本的问题是,由于没有安装 gcc-core 文件,所以 cc1 不存在。而 gcc 使用 cc1。我猜想,当 gcc 尝试启动 cc1 时,它使用 CreateProcess 传递 cc1 的路径,而不是现有文件的路径。因此错误消息。
【讨论】:
我的磁盘在安装过程中已满,我想这给我造成了问题,即使 mingw 仍然安装时没有警告。【参考方案4】:所以这是一个愚蠢的错误消息,因为它没有告诉你它找不到什么文件。
使用详细标志gcc -v
再次运行该命令以查看 gcc 正在执行的操作。
就我而言,它碰巧试图调用cc1plus
。我查了,我没有。安装了mingw的C++编译器,然后我就做了。
【讨论】:
我遇到了类似的问题(在内部它试图调用 cc1)。 cc1 包含在我的发行版中,但包含路径不在我的 PATH 中。【参考方案5】:我遇到了完全相同的问题。
在重新检查了我的PATH
之后,我意识到我安装了Mingw
(64 位)和Cygwin
(32 位)。
问题是Mingw
和Cygwin
都有g++
。
通过停用Cygwin
的路径,错误消失了。
【讨论】:
【参考方案6】:在“授人以鱼,养其一日;授人以渔,除其一整个周末”的脉络中,
g++ --help显示编译器选项。 g++ -v 选项有助于:
-v 显示编译器调用的程序
查看输出中的虚假路径。就我而言,原始命令:
g++ -v "d:/UW_Work/EasyUnit/examples/1-BasicUnitTesting/main.cpp"
生成的输出包括这个小宝石:
-iprefix c:\olimexods\yagarto\arm-none-eabi\bin\../lib/gcc/arm-none-eabi/4.5.1/
这将解释“没有这样的文件或目录”消息。
“../lib/gcc/arm-none-eabi/4.5.1/”部分来自内置规范:
g++ -dumpspecs
【讨论】:
【参考方案7】:我遇到了同样的问题,但目前列出的解决方案在第一次尝试时都没有帮助。
-v
选项没有提供任何额外的线索。
不得不求助于ProcMon 才能找到问题的根源。
转储g++
进程文件活动揭示了在不同路径中查找cc1plus
可执行文件的多次尝试。其中有通往旧 GCC 版本的路径。
但是那个旧版本位于单独的文件夹中,根本没有从我尝试运行的新版本中引用。
最后在系统 %PATH% 环境变量中找到了过时的路径。 删除后,新版本开始正常工作。
【讨论】:
在寻找这个问题多年后,我遇到了与 cc1/cc1plus 相关的类似问题。 GCC 出于某种原因在 PATH 中的所有路径上寻找 cc1.exe。在找不到任何地方后,gcc 出错CreateProcess: No such file or directory.
将合适的 cc1.exe 路径添加到 PATH 并构建成功。
使用 ProcMon 是个好主意,因为错误不是那么冗长,而且显然有很多可能的原因导致这个特定的(神秘的)错误消息。就我而言,我发现 g++ 正在寻找 as
(汇编程序),但它丢失了。安装它终于解决了我的问题。【参考方案8】:
尝试从带有 mingw 安装链接的 Cygwin 运行时收到相同的错误消息。
在 WinXP SP3 和 gcc 上使用来自 http://www.mingw.org/wiki/FAQ 的 mingw32-make-3.80.0-3.exe 和 Start -> Programs -> 中的 mingw shell 选项的相同安装工作正常。
【讨论】:
【参考方案9】:我遇到了同样的问题,建议的修复方法都不适合我。因此,即使这是一个旧线程,我想我也不妨发布我的解决方案,以防其他人通过 Google 找到这个线程(就像我一样)。
对我来说,我必须卸载 MinGW/删除 MinGW 文件夹,然后重新安装。重新安装后,它就像一个魅力。
【讨论】:
【参考方案10】:我遇到了类似的问题。最初,将 GCC bin 文件夹添加到我的系统路径并没有解决问题。我找到了两个解决方案。
首先是运行我在 MinGW 安装的根目录中找到的批处理文件 mingwbuilds.bat。它(显然)启动了一个正确配置为运行 GCC 的命令提示符。第二个是从我添加到我的用户路径变量的 GCC 安装 bin 文件夹中删除双引号。在注意到批处理文件未在安装 bin 路径周围使用双引号后,我尝试了此操作。
额外细节
我在浏览安装文件夹树试图找到未启动的各种可执行文件时意外发现了批处理文件(根据 -v 输出)。我在 MinGW wiki http://www.mingw.org/wiki/Getting_Started 的“注意事项”和“环境设置”部分中找到了一些信息,这表明 MinGW 安装程序未设置系统或用户路径以包含安装文件夹的原因。这些似乎证实了批处理文件旨在启动适合从 Windows 提示符运行 GCC 的命令提示符。
【讨论】:
【参考方案11】:MinGW 似乎有几个发行版。你尝试了哪一个?作为记录,我遇到了与 OP 完全相同的问题,我得到的发行版来自 TDM-GCC 4.5.1。
我发现 MinGW 发行版 here 似乎工作得更好,并且设置正确。因此,对于遇到这种延迟的“createprocess-no-such-file-or-directory”错误并且无法正常工作的任何人,请卸载您现有的 MinGW 并尝试我链接的那个。
【讨论】:
【参考方案12】:如果您有不同版本的程序,可能会出现此问题。
例如,您有 1 岁的 gcc
,并且您想要编译 C++ 源代码。如果你使用mingw-get
安装g++
,gcc
和g++
会突然出现不同的版本,你很可能会遇到这种情况。
运行mingw-get update
和mingw-get upgrade
为我解决了这个问题。
【讨论】:
【参考方案13】:我有一个很长的路径,并且在某处有一个文件(不是 gcc.exe),而是另一个文件,gcc.exe 正在从该路径访问..
所以当我清除路径时,它起作用了
C:\MinGW>cd bin
C:\MinGW\bin>where gcc.exe
C:\MinGW\bin\gcc.exe
C:\Perl64\site\bin\gcc.exe
^^ 所以从那里运行gcc肯定会运行ming gcc.exe
C:\MinGW\bin>type file6.c
#include<stdio.h>
void main()
int num1,num2;
scanf("%2d %4d",&num1,&num2);
printf("a=%d b=%d",num1,num2);
scanf("%d",&num1);
//flushall();
printf("c=%d",num1);
编译它我得到了这个错误
C:\MinGW\bin>gcc file6.c
gcc: error: CreateProcess: No such file or directory
我的路径很大
C:\MinGW\bin>path
PATH=C:\Windows\system32;C:\Windows;C:\Windows\system32\wbem;C:\P......
C:\MinGW\bin>路径 | grep -io "鸣"
那里没有鸣。
C:\MinGW\bin>echo MING | grep -io "明" 明
(是的,grep 有效.. 那里没有 ming 路径)
彻底清除我的路径,引导它工作!
C:\MinGW\bin>set PATH=
C:\MinGW\bin>gcc file6.c
C:\MinGW\bin>
因此,目前尚不清楚 PATH 中究竟是什么导致了冲突。什么目录,什么文件。
更新-
以上对我来说似乎是正确的,但要补充一点,这也不是路径冲突中较早发生的事情的简单情况。因为通常当前目录优先。就 gcc --version 显示它正在运行 ming 而不是冲突目录中的一个而言,它确实在这里。所以发生了一些有趣的事情,如果冲突的目录在路径中),则必须执行 .\gcc 或将.
添加到路径的开头,或在路径中的任何冲突目录之前添加c:\MinGW\bin
。即使您在C:\MinGW\bin
中也是如此,这很奇怪。当它出错时,它仍在运行 Ming 的 gcc,但(出于某种原因)也在查看冲突的目录,正如我从进程监视器中看到的那样。 http://wiki.codeblocks.org/index.php?title=Installing_MinGW_with_Vista 在此处非常受欢迎的答案中提到的链接中可能有更多答案
那是 Ming32 位..
看看 Ming 64 位,可能有同样的问题,但我看到,有趣的是,它带有一个 bat 文件,(明智地)实际上将 bin 目录放在路径的开头。看起来这是正确运行 Ming gcc 的标准方式。
code::blocks IDE(明智地)还将 bin 目录放在路径的开头。如果您运行显示环境变量的 C 程序,那么您会看到。
【讨论】:
【参考方案14】:这个问题是因为你使用Mingw GCC编译时使用了大写后缀stuff.C而不是小写stuff.c。例如,当你这样做时:
gcc -o stuff stuff.C
然后你会收到消息:gcc: CreateProcess: No such file or directory
但如果你这样做:
gcc -o stuff stuff.c
然后就可以了。我只是不知道为什么。
【讨论】:
因为许多 Unix 编译器遵循的约定是.c
是 C 语言文件的扩展名,而 .C
是(连同 .c++
、.cpp
和 .cxx
)的扩展名对于 C++ 文件,mingw 遵循这个约定,因为它的根是 Unix。
您还可以定义参数-x c
以明确指定c
作为以下输入文件的语言。【参考方案15】:
将E:\MinGW\bin
添加到PATH
变量中。
【讨论】:
如果他不加做PATH,提示甚至不会将gcc识别为程序。【参考方案16】:我遇到了同样的问题(我正在运行 cygwin)
通过 cygwin.bat 启动 shell 没有帮助,但通过 MingWShell 启动 shell 可以。不太清楚为什么,但我认为这与 cygwin 在执行脚本和底层文件系统之间放置的额外层有关。
我在虚拟环境的 cygwin 中运行 pip install 来安装 django sentry..
【讨论】:
如何加载mingwshell? 这是个好问题。这是不久前的,从那以后我重新格式化,但从内存中我通过mingw.org/wiki/getting_started安装 你能给我看一张具体的照片吗?在谷歌图片上显示你想到/记住的 mingw gui 是什么?【参考方案17】:(参考原题)
今日版mingw
(见发布日期)
我所要做的就是在我运行 gcc
的同一个 shell 中设置路径。
我花了一个小时才记住如何设置DOS variables
...
A:> set PATH=C:\MinGW\bin\;
C:\Program Files\ImageMagick-6.8.0-Q16\;
C:\WINDOWS\system32\;C:\WINDOWS\;C:\WINDOWS\System32\Wbem\;
C:\WINDOWS\system32\WindowsPowerShell\v1.0\;
C:\Program Files\QuickTime\QTSystem\
A:> gcc hi.c
【讨论】:
【参考方案18】:我遇到了同样的问题,我尝试了一切都没有结果,对我来说解决问题的是更改 PATH 变量中库路径的顺序。我有 cygwin 以及其他一些编译器,所以它们之间可能存在某种冲突。我所做的是把 C:\MinGW\bin;路径优先于所有其他路径,它为我解决了问题!
【讨论】:
【参考方案19】:尽量将路径放在系统变量中,而不是将用户变量放在环境变量中。
【讨论】:
【参考方案20】:我收到此错误消息,因为我使用的是 MinGW-w64,而 <install path>\bin
中的命令都有一个奇怪的前缀。我试图在“目标别名”目录而不是<install path>\bin
目录中调用可执行文件,这导致了更多问题。根据FAQ,这是一个禁忌。因此,对我来说,解决方案是为所有前缀命令创建符号链接。我打开了一个提升的命令提示符,并为每个可执行文件使用了类似 mklink gcc.exe x86_64-w64-mingw32-gcc.exe
的内容,现在我的构建工作正常了。
【讨论】:
【参考方案21】:虽然帖子很旧,但我在 2015 年 2 月 13 日的 mingw32 版本 4.8.1 上遇到了同样的问题。使用 Eclipse CDT 编译失败并显示此消息。从命令行尝试使用 -v 选项也失败了。我也错过了 cc1plus 可执行文件。
原因: 我从 mingw32 站点下载了命令行和图形安装程序。我用它来初始安装 mingw32。使用 GUI 我选择了基本工具,同时选择了 c 和 c++ 编译器。
此安装程序未完成 32 位 c++ 编译器的安装。我有 g++ 和 cpp 文件,但没有 cc1plus 可执行文件。尝试进行“更新”失败,因为安装程序假定我已安装所有内容。
为了修复,我找到了这些网站: http://mingw-w64.sourceforge.net/ http://sourceforge.net/projects/mingw-w64/ 我下载并运行了这个“在线安装”。果然,这个包含丢失的文件。我修改了我的 PATH 变量并指向包含 g++ 可执行文件的“bin”文件夹。重新启动。安装 64 位 Eclipse。打开 Eclipse 并正确编译、执行和调试“Hello World”c++ 程序。
注意:64 位安装程序似乎默认为 UNIX 设置。为什么安装程序不能确定操作系统???请务必更改它们。
我花了整整一个晚上来处理这个问题。希望这对某人有所帮助。
【讨论】:
由于 sourceforge.net 上的 mingw-w64 项目正在转移到 mingw-w64.org 我建议使用mingw-w64.org【参考方案22】:我遇到了同样的问题。
我已经通过 MinGW(包 mingw32-gcc-g++)安装了一个 g++ 编译器,但我需要一个 C 编译器,所以我运行了 mingw-get-setup.exe它安装 mingw32-base 包,一个带有 C 编译器的包。
唉!使用gcc编译时出现这个错误:
gcc: error: createprocess: no such file or directory
我所做的是,仍然使用 MinGW 安装管理器,我删除了 C 和 C++ 编译器包,即 mingw32-base 和 mingw32-gcc-g++ 和 ALSO删除了 C:\MinGW 目录本身。然后我重新运行了 mingw-get-setup.exe,安装了 mingw32-base,瞧,它成功了 :)
【讨论】:
【参考方案23】:对我来说,当命令行的长度超过 cygwin 的限制时,这个错误就开始发生了。这是 32000 字节。
您可以使用以下命令检查限制:
$ getconf ARG_MAX
32000
我正在工作的项目中的解决方案尚未最终确定,但可能的解决方案包括:
使用从链接库构建的二进制文件,而不是从所有项目文件构建的二进制文件。 缩短包含许多源代码文件的目录名称,因为目录名称重复多次。 查看链接器使用的文件列表。可能还有更多可能的解决方案,最简单的可能是找到增加长度限制的方法。
【讨论】:
【参考方案24】:专门告诉你在windows中为migwin设置环境变量后需要重新启动。
【讨论】:
不正确:在 Windows 7(也许还有 Vista)中,打开一个新的命令提示符就足够了。在 Windows XP 中,注销和登录就足够了。无需重新启动。 你不需要这样做。但是,您必须加载一个新的命令 shell 才能读取您更改的新环境变量。【参考方案25】:我的解决方案很简单:
当您保存程序时,假设将其命名为 hi.cpp 将其放入文件夹,例如xxl 然后保存你的程序。
把这个文件夹剪下来放到mingw的bin文件夹下。
当你调用程序时:
------ g++ xxl\hi.cpp --------
【讨论】:
以上是关于CreateProcess:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
x86_64-w64-mingw32-gcc.exe:错误:CreateProcess:没有这样的文件或目录
i686-elf-gcc CreateProcess 错误(没有这样的文件或目录)
MySQLdb/_mysql.c(29):致命错误 C1083:无法打开包含文件:'mysql.h':没有这样的文件或目录