CreateProcess: нет такого файла или каталога - PullRequest
43 голосов
/ 03 октября 2010

Я получаю эту ошибку всякий раз, когда пытаюсь запустить GCC вне его установочного каталога (E:\MinGW\bin).

Итак, допустим, я нахожусь в 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.

Ответы [ 24 ]

31 голосов
/ 22 мая 2011

Согласно 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\

30 голосов
/ 08 марта 2011

У меня была похожая проблема, вызванная не установкой компилятора C ++. В моем случае я компилировал .cpp файлы для расширения Python, но компилятор сначала вызывается как c: \ mingw \ bin \ gcc.exe.

Внутри gcc.exe заметил бы, что его попросили скомпилировать файл .cpp. Он попытается вызвать g ++. Exe и потерпит неудачу с тем же сообщением об ошибке:

gcc.exe: CreateProcess: нет такого файла или каталога

8 голосов
/ 30 июля 2012

У меня только что была эта проблема.

В моем случае проблема была из-за проблем при загрузке пакетов для GCC. Программа mingw-get думала, что она закончила загрузку, но это не так.

Я хотел обновить GCC, поэтому я использовал mingw-get, чтобы получить более новую версию. По какой-то причине mingw-get посчитал, что загрузка определенного файла завершена, но это не так. Когда он начал извлекать файл, я думаю, он выдал ошибку (которую я даже не удосужился посмотреть - я просто запустил «mingw-get update && mingw-get install mingw32-gcc» и оставил ее там).

Чтобы решить проблему, я удалил gcc, выполнив команду «mingw-get remove mingw32-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, который не был путем к существующему файлу. Таким образом сообщение об ошибке.

6 голосов
/ 25 мая 2013

Так что это глупое сообщение об ошибке, потому что оно не сообщает , какой файл не может быть найден.

Запустите команду еще раз с подробным флагом gcc -v, чтобы увидеть, что такое gcc.

В моем случае случилось так, что я пытался дозвониться до cc1plus. Я проверил, у меня этого нет. Установил M ++ компилятор C ++, а затем я сделал.

5 голосов
/ 01 сентября 2012

У меня была точно такая же проблема.

После перепроверки моего PATH я понял, что установил Mingw (64 бит) и Cygwin (32 бит).Проблема в том, что Mingw и Cygwin имеют g++.

При деактивации пути Cygwin ошибка исчезла.

2 голосов
/ 24 декабря 2010

Получалось то же сообщение об ошибке при попытке запуска из Cygwin со ссылками на установку mingw.

При использовании той же установки mingw32-make-3.80.0-3.exe из http://www.mingw.org/wiki/FAQ и опция оболочки mingw из Пуск -> Программы -> на WinXP SP3 и gcc работает нормально.

1 голос
/ 08 марта 2012

У меня была такая же проблема, и ни одно из предложенных исправлений не помогло мне.Поэтому, даже если это старая ветка, я полагаю, что я мог бы также опубликовать свое решение на тот случай, если кто-то найдет эту ветку через Google (как я).

Для меня пришлось удалить MinGW / удалитьMinGW папку, и переустановите.После переустановки работает как брелок.

1 голос
/ 13 июля 2015

У меня был очень длинный путь, и где-то там есть файл (не 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> path |grep -io "ming"

Там не было мин.

C: \ MinGW \ bin> echo MING |grep -io "ming" MING

(и да, что grep работает .. у пути там не было ming)

Очистив мой путь полностью, привел его к работе!

C:\MinGW\bin>set PATH=

C:\MinGW\bin>gcc file6.c

C:\MinGW\bin>

Итак, пока не ясно, что именно в ПУТИ привело к столкновению.Какой каталог, какой файл.

Update-

Вышеприведенное, по-моему, верно для меня, но, добавим, это также не простой случай чего-то более раннего в путиконфликтует .. потому что обычно текущий каталог имеет приоритет.И это здесь, поскольку gcc --version показывает, что он работает с ming, а не с одним из конфликтующих каталогов.Так что происходит нечто забавное, если конфликтующий каталог находится в пути), нужно либо сделать. \ Gcc, либо добавить . в начало пути, либо добавить c:\MinGW\bin перед любыми конфликтующими каталогами в пути.это тот случай, даже когда вы находитесь в C:\MinGW\bin, и это странно.И когда он выдает ошибку, он все еще запускает gcc Ming, но (по какой-то причине) тоже смотрит на конфликтующий каталог, как я вижу из монитора процессов.Здесь может быть больше ответа http://wiki.codeblocks.org/index.php?title=Installing_MinGW_with_Vista в ссылке, упомянутой в очень одобренном ответе здесь

Это бит Ming32 ..

Глядя на 64-битную версию Ming, вероятно, имеет те жепроблема, но я вижу, что интересно, это идет с файлом bat, который (разумно) фактически помещает каталог bin в начало пути.И похоже, что это стандартный способ правильной работы Ming gcc.

IDE code :: blocks (разумно) также помещает каталог bin в начало пути.Если вы запустите программу на C, которая показывает переменные окружения, вы увидите это.

1 голос
/ 03 августа 2016

У меня была такая же проблема, но ни одно из перечисленных решений не помогло с первой попытки.

-v опция не дала никаких дополнительных подсказок.

Пришлось прибегнуть к ProcMon , чтобы найти корень проблемы.

Дампирование g++ активность файла процесса выявила многочисленные попытки найти исполняемый файл cc1plus по разным путям.Среди них были пути к старой версии GCC.

Но эта старая версия находилась в отдельной папке и вообще не была указана в новой версии, которую я пытался запустить.

Наконец устаревший путьбыл найден в системной переменной окружения% PATH%.После удаления новая версия начала работать без ошибок.

1 голос
/ 04 мая 2015

В строке «дай человеку рыбу, накорми его на день; научи человека ловить рыбу, избавляйся от него на все выходные»

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/

, который объяснял бы сообщение «нет такого файла или каталога».

Сегмент "../lib/gcc/arm-none-eabi/4.5.1/" взят из встроенных спецификаций:

g++ -dumpspecs
...