CreateProcess:没有这样的文件或目录

时间:2010-10-03 02:49:53

标签: c gcc mingw

每当我尝试在其安装目录(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。

25 个答案:

答案 0 :(得分:30)

由于没有安装C ++编译器,我遇到了类似的问题。在我的情况下,我正在为Python扩展编译.cpp文件,但编译器首先被调用为c:\ mingw \ bin \ gcc.exe。

在内部,gcc.exe会注意到它被要求编译.cpp文件。它会尝试调用g ++。exe并使用相同的错误消息失败:

  

gcc.exe:CreateProcess:没有这样的文件或目录

答案 1 :(得分:30)

根据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\

答案 2 :(得分:8)

我刚遇到这个问题。

就我而言,问题是由于下载GCC软件包时出现问题。 mingw-get程序认为它完成了下载,但它没有。

我想升级GCC,所以我用mingw-get来获取更新的版本。出于某种原因,mingw-get认为特定文件的下载已经完成,但事实并非如此。当它去提取文件时,我猜它发出了一个错误(我甚至懒得看 - 我只是跑了“mingw-get update&amp;&amp; mingw-get install mingw32-gcc”并把它留在那里)。

要解决这个问题,我通过执行“mingw-get remove mingw32-gcc”删除了gcc,并删除了包文件(mingw-get没有完全下载),这是在mingw缓存文件夹中(“C: \ MinGW \ var \ cache \ mingw-get \ packages“在我的系统中”,然后再次运行安装命令。它下载并安装了GCC缺失的部分(它还没有完全下载gcc-core软件包)。

这解决了我的问题。

有趣的是,即使在我删除了缓存文件夹中的包文件之后,mingw-get也足够聪明地继续下载gcc-core,并且还删除了mingw32-gcc包。

我认为更基本的问题是,由于没有安装gcc-core文件,cc1不存在。而gcc使用cc1。我想,当gcc尝试启动cc1时,它使用CreateProcess传递cc1的路径,这不是现有文件的路径。因此错误信息。

答案 3 :(得分:6)

所以这是一个愚蠢的错误消息,因为它没有告诉你它找不到的文件。

使用详细标记gcc -v再次运行该命令,以查看gcc的用途。

在我的情况下,碰巧是在试图致电cc1plus。我检查过,我没有。安装了mingw的C ++编译器然后我做了。

答案 4 :(得分:5)

我有完全相同的问题。

重新检查PATH后,我意识到我安装了Mingw(64位)和Cygwin(32位)。 问题是MingwCygwin都有g++

通过停用Cygwin的路径,错误消失了。

答案 5 :(得分:2)

尝试从Cygwin运行带有指向mingw安装的链接时收到相同的错误消息。

使用来自http://www.mingw.org/wiki/FAQ的mingw32-make-3.80.0-3.exe和来自Start - &gt;的mingw shell选项的相同安装。程序 - &gt;在WinXP SP3上,gcc工作正常。

答案 6 :(得分:1)

具体告诉您在windows中为migwin设置环境变量后需要重新启动。

答案 7 :(得分:1)

我遇到了类似的问题。最初,将GCC bin文件夹添加到我的系统路径并不能解决问题。我找到了两个解决方案。

第一个是运行我在MinGW安装的根目录mingwbuilds.bat中找到的批处理文件。它(显然)启动正确配置的命令提示符以运行GCC。第二个是从我添加到用户路径变量的GCC安装bin文件夹中删除双引号。我注意到批处理文件没有在安装bin路径周围使用双引号。

额外细节

我在浏览安装文件夹树时意外找到了批处理文件,试图找到未启动的各种可执行文件(根据-v输出)。我在“注意事项和环境设置”部分的MinGW wiki http://www.mingw.org/wiki/Getting_Started中找到了一些信息,指出MinGW安装程序未设置系统或用户路径以包含安装文件夹的原因。这些似乎确认批处理文件旨在启动适合从Windows提示符运行GCC的命令提示符。

答案 8 :(得分:1)

这个问题是因为当你使用Mingw GCC编译它时,你使用大写后缀stuff.C 而不是小写的stuff.c。例如,当你这样做时:

gcc -o stuff stuff.C

然后您将收到消息:gcc: CreateProcess: No such file or directory

但如果你这样做:

 gcc -o stuff stuff.c

然后它的工作原理。我只是不知道为什么。

答案 9 :(得分:1)

在&#34;给一个人一条鱼,喂他一天;教一个男人钓鱼,整个周末摆脱他#34; vein,

g++ --help
显示编译器选项。 g ++ -v选项有助于:

  -v                       Display the programs invoked by the compiler

查看输出中的伪造路径。在我的情况下,原始命令:

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/

这将解释&#34;没有这样的文件或目录&#34;信息。

&#34; ../ lib / gcc / arm-none-eabi / 4.5.1 /&#34;细分市场来自内置规格:

g++ -dumpspecs

答案 10 :(得分:1)

我有一条很长的路径,那里有一个文件(不是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&gt;路径| grep -io“ming”

那里没有明星。

C:\ MinGW \ bin&gt; echo MING | grep -io“ming” 明

(是的,grep工作......路径没有那里)

彻底清理我的路径,让它发挥作用!

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 64bit,可能有同样的问题,但我看到,有趣的是,它附带了一个bat文件(明智地)实际上将bin目录放在路径的tart上。看起来这是正确运行Ming gcc的标准方法。

代码:: blocks IDE(明智地)也将bin目录放在路径的开头。如果你运行一个显示环境变量的C程序,那么你会看到它。

答案 11 :(得分:1)

我遇到了同样的问题,但目前列出的解决方案都没有帮助。

-v选项没有提供任何其他线索。

不得不诉诸ProcMon才能找到问题的根源。

转储g++流程文件活动揭示了在不同路径上查找cc1plus可执行文件的大量尝试。其中有旧GCC版本的路径。

但旧版本位于单独的文件夹中,并且完全没有引用我试图运行的新版本。

最后,在系统%PATH%环境变量中找到了过时的路径。 删除后,新版本开始正常运行。

答案 12 :(得分:1)

我遇到了同样的问题,没有一个建议的修复程序对我有效。所以即使这是一个老线程,我想我也可以发布我的解决方案以防其他人通过谷歌找到这个帖子(就像我一样)。

对我来说,我必须卸载MinGW /删除MinGW文件夹,然后重新安装。重新安装后,它就像一个魅力。

答案 13 :(得分:0)

我遇到了同样的问题。

我已经通过MinGW安装了g ++编译器(包 mingw32-gcc-g ++ ),但我需要一个C编译器,所以我运行了mingw-get-setup.exe它安装了 mingw32-base 包,这是一个带有C编译器的包。

唉!当我使用gcc编译时,我遇到了这个错误:

gcc:错误:createprocess:没有这样的文件或目录

我做的是,仍然使用MinGW安装管理器,我删除了C和C ++编译器软件包,即 mingw32-base mingw32-gcc-g ++ 和ALSO删除了C:\ MinGW目录本身。然后我重新mingw-get-setup.exe,安装 mingw32-base ,瞧,它工作了:)

答案 14 :(得分:0)

E:\MinGW\bin添加到PATH变量。

答案 15 :(得分:0)

对我来说,当命令行的长度超过cygwin的限制时,便开始出现此错误。那是32000字节。

您可以使用以下命令检查限制:

$ getconf ARG_MAX
32000

我正在研究的项目中的解决方案尚未完成,但可能的解决方案包括:

  • 使用从链接库构建的二进制文件,而不是从所有项目文件构建的二进制文件。
  • 缩短包含许多源代码文件的目录的名称,因为目录名称会重复多次。
  • 查看链接器使用的文件列表。

也许还有更多可能的解决方案,最简单的也许就是找到增加长度限制的方法。

答案 16 :(得分:0)

虽然帖子很旧,但我在2015/02/13上遇到了与mingw32 vers 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设置。为什么安装程序无法确定操作系统???一定要改变它们。

我花了整整一个晚上来处理这件事。希望这有助于某人。

答案 17 :(得分:0)

我收到此错误消息,因为我使用的是MinGW-w64,<install path>\bin中的命令都有一个奇怪的前缀。我试图在&#34;目标别名&#34;中调用可执行文件。目录而不是<install path>\bin目录,导致更多问题。根据{{​​3}},这是禁忌。那么,我的解决方案是创建所有前缀命令的符号链接。我打开了一个提升的命令提示符,并为每个可执行文件使用类似mklink gcc.exe x86_64-w64-mingw32-gcc.exe的内容,现在我的构建工作正常。

答案 18 :(得分:0)

尝试将路径放在系统变量中,而不是将用户变量放入环境变量中。

答案 19 :(得分:0)

我有同样的问题,我尝试了一切没有结果,为我解决的问题是改变了PATH变量中库路径的顺序。我有cygwin以及其他一些编译器,所以它们之间可能存在某种冲突。我做的是放C:\ MinGW \ bin;路径首先在所有其他路径之前,它为我解决了问题!

答案 20 :(得分:0)

(参考原始问题)
今天的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

答案 21 :(得分:0)

如果您有不同版本的程序,则可能会出现此问题。

例如,您有1岁gcc并且您想要编译C ++源代码。如果您使用mingw-get来安装g++,则gccg++会突然出现不同的版本,并且您可能会遇到这种情况。

正在运行mingw-get updatemingw-get upgrade为我解决了这个问题。

答案 22 :(得分:0)

我遇到了同样的问题(我正在运行cygwin)

通过cygwin.bat启动shell没有帮助,但通过MingWShell启动shell。不太清楚为什么,但我认为这与cygwin在执行脚本和底层文件系统之间放置的额外层有关。

我在虚拟环境的cygwin中运行pip install来安装django哨兵..

答案 23 :(得分:0)

看起来MinGW有几个发行版。你试过哪一个?为了记录,我遇到了与OP完全相同的问题,我得到的发行版来自TDM-GCC 4.5.1。

我发现MinGW发行版here似乎工作得更好,并且设置正确。因此,对于遇到这个迟钝的'createprocess-no-such-file-or-directory'错误并且无法正常工作的任何人,请卸载现有的MinGW并尝试使用我链接的MinGW。

答案 24 :(得分:-1)

我的解决方案很简单:

  1. 当您保存程序时,让我们说它的名为 hi.cpp 将其放入文件夹,例如 xxl 然后保存您的程序。

  2. 剪切此文件夹并将其放入mingw的bin文件夹中。

  3. 致电该计划时:

    ------ g++ xxl\hi.cpp --------