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

Я получаю эту ошибку всякий раз, когда пытаюсь запустить 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.


person Insomaniacal    schedule 03.10.2010    source источник
comment
Вы добавили его в путь ПОСЛЕ того, как получили эту ошибку, используя графический интерфейс переменных среды Windows? Если вы это сделали и пытаетесь запустить gcc в той же командной оболочке, которую использовали изначально, это не сработает. У этой оболочки есть собственная копия PATH, которая не изменилась при использовании графического интерфейса. Вы можете увидеть это, набрав echo %PATH% в вашей командной оболочке. Самый быстрый способ исправить это — выйти из системы и снова войти в нее.   -  person George    schedule 03.10.2010
comment
Ах, я подумал, что просто создать новый экземпляр CMD.exe будет достаточно, чтобы использовать новую переменную PATH. Тем не менее, теперь, когда я попытался выйти и войти, все работает нормально. Спасибо!   -  person Insomaniacal    schedule 03.10.2010
comment
Это можно исправить, если вы измените переменную среды temp dir на каталог, в имени которого нет пробелов.   -  person Jessie Lesbian    schedule 04.01.2021


Ответы (25)


В нем специально сказано, что вам нужно перезагрузиться после того, как вы установите переменные среды в окнах для migwin.

person Community    schedule 15.12.2010
comment
неверно: в Windows 7 (возможно, и в Vista) достаточно открыть новую командную строку. В Windows XP было достаточно выйти из системы и снова войти в нее. Перезагрузка не требуется. - person rubenvb; 08.03.2011
comment
Вам не нужно этого делать. Однако вам нужно загрузить новую командную оболочку, чтобы прочитать новые переменные среды, которые вы изменили. - person Arnestig; 01.08.2012
comment
Великолепный! Я буду первым, кто получит принятый ответ с -ve голосов. Ребята, вам приходится спорить о перезапуске из-за того, что вы не перезапускаете? Отлично. Не перезагружайте систему. Перезапустите оболочку или войдите, выйдите из системы, что всегда работает. Или, если у вас есть способ горячей замены env vars в загруженной оболочке, сделайте это. - person ; 20.11.2013
comment
@kadaj Если это действительно вопрос о том, что переменная среды не установлена, как видно из командной строки, то перезапуск исправит это только в том случае, если переменная среды установлена ​​​​в реестре. Если переменная окружения не задана, перезапуск не поможет. (помимо того факта, что если он установлен, вам не нужно перезагружаться, вам просто нужно запустить новую оболочку cmd, чтобы эта оболочка могла получить к ней доступ) - person barlop; 13.07.2015

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

person Herberth Amaral    schedule 22.05.2011
comment
Возможно, это не решило проблему для оригинального плаката, но это была моя проблема. Спасибо! - person sleeves; 13.10.2011
comment
Нет... мне ни капельки не помогло. - person David S; 25.01.2012
comment
Это была и моя проблема. Я на 64-битном gcc (проект mingw64). Добавление ‹каталога установки mingw›\libexec\gcc\x86_64-w64-mingw32\4.7.0\ исправило это. - person david a.; 19.03.2013
comment
В моем случай только для командной строки проблема была устранена путем обратной очистки файла PATH. ProcMon очень помог в диагностике. - person Vadzim; 03.08.2016
comment
Если кто-то не знает, как это сделать, это объясняется здесь. - person Donald Duck; 29.10.2017
comment
Я добавил MinGW\bin к своему PATH, и это сработало. Отличный ответ! - person Steven Liang; 24.10.2020

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

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

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

person Luis Bruno    schedule 08.03.2011
comment
Ответ Луиса Бруно решил мою проблему. Убедитесь, что вы установили правильный компилятор. Я пытаюсь скомпилировать файлы .cpp с помощью gcc.exe, хотя на самом деле требуется g++. mingw-get install g++ устранил ошибку. - person Neil Fan; 03.08.2011

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

В моем случае проблема была из-за проблем при загрузке пакетов для 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, который не был путем существующего файла. Таким образом, сообщение об ошибке.

person Pedro Henrique A. Oliveira    schedule 30.07.2012
comment
Мой диск был заполнен во время установки, и я предполагаю, что это вызвало у меня проблему, даже если mingw все еще устанавливался без предупреждения. - person Adder; 16.12.2012

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

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

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

person Colonel Panic    schedule 25.05.2013
comment
У меня была аналогичная проблема (внутри он пытался вызвать cc1). cc1 был включен в мой дистрибутив, но пути включения не было в моем PATH. - person Casey Kuball; 14.07.2021

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

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

Деактивировав путь Cygwin, ошибка исчезла.

person znatz    schedule 01.09.2012

In the "give a man a fish, feed him for a day; teach a man to fish, get rid of him for the whole weekend" vein,

g++ --help
shows compiler options. The g++ -v option helps:

  -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
person Technophile    schedule 04.05.2015

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

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

person iulian    schedule 24.12.2010

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

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

person Lyle    schedule 07.03.2012

У меня возникла аналогичная проблема. Первоначально добавление папки GCC bin к моему системному пути не решило проблему. Я нашел два решения.

Первый состоял в том, чтобы запустить пакетный файл, который я нашел в корневом каталоге установки MinGW, mingwbuilds.bat. Он (очевидно) запускает командную строку, правильно настроенную для запуска GCC. Второй заключался в удалении двойных кавычек из папки установки GCC, которую я добавил в свою переменную пути пользователя. Я попробовал это, заметив, что пакетный файл не использует двойные кавычки вокруг пути установки bin.

Дополнительные детали

Я случайно нашел пакетный файл, просматривая дерево папок установки, пытаясь найти различные исполняемые файлы, которые не запускались (согласно выводу -v). Я нашел некоторую информацию на вики MinGW, http://www.mingw.org/wiki/Getting_Started в разделах «Предупреждения» и «Параметры среды», это указывает, почему установщик MinGW не настраивает системный или пользовательский путь для включения папки установки. Похоже, они подтверждают, что пакетный файл предназначен для запуска командной строки, подходящей для запуска GCC из командной строки Windows.

person Dave Richardson    schedule 29.01.2014

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

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

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

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

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

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

person Vadzim    schedule 03.08.2016
comment
После нескольких лет поиска этой проблемы у меня возникла аналогичная проблема, связанная с cc1/cc1plus. GCC почему-то искал cc1.exe по всем путям в PATH. После того, как ничего не удалось найти, gcc выдал ошибку CreateProcess: No such file or directory.. Добавил подходящий путь cc1.exe в PATH, и сборка прошла успешно. - person Casey Kuball; 13.07.2021

Похоже, есть пара релизных дистрибутивов для MinGW. Какой из них вы пробовали? Для справки, я столкнулся с той же проблемой, что и OP, и дистрибутив, который я получил, был от TDM-GCC 4.5.1.

Я нашел дистрибутив MinGW здесь, кажется, работает намного лучше и настраивает все правильно. Так что для тех, кто столкнулся с этой замедленной ошибкой «создать процесс-нет-такого-файла-или-каталога» и не может заставить что-то работать, удалите существующий MinGW и попробуйте тот, который я связал вместо этого.

person greatwolf    schedule 16.12.2010

Эта проблема может возникнуть, если у вас разные версии программ.

Например, у вас есть gcc 1-летней давности, и вы хотите скомпилировать исходный код C++. Если вы используете mingw-get для установки g++, gcc и g++ внезапно будут иметь разные версии, и вы, вероятно, окажетесь в такой ситуации.

Запуск mingw-get update и mingw-get upgrade решил эту проблему для меня.

person bubla    schedule 20.11.2012

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

(и да, этот 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 и это странно. И когда он выдает ошибку, он все еще работает с gcc Ming, но (по какой-то причине) также смотрит на конфликтующий каталог, как я вижу из монитора процесса. Здесь может быть больше ответа http://wiki.codeblocks.org/index.php?title=Installing_MinGW_with_Vista в ссылке, упомянутой в очень положительном ответе здесь

Это Ming32 бит..

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

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

person barlop    schedule 13.07.2015

Эта проблема возникает из-за того, что при компиляции с помощью Mingw GCC вы используете суффикс stuff.c в верхнем регистре, а не stuff.c в нижнем регистре. Например, когда вы делаете так:

gcc -o stuff stuff.C

то вы получите сообщение: gcc: CreateProcess: No such file or directory

Но если вы сделаете это:

 gcc -o stuff stuff.c

тогда это работает. Я просто не знаю почему.

person tess    schedule 13.04.2013
comment
Поскольку многие компиляторы Unix следуют соглашению о том, что .c является расширением для файлов языка C, а .C является (наряду с .c++, .cpp и .cxx) расширением для файлов C++, и mingw следует этому соглашению, поскольку его корнями является Unix. - person Ben Voigt; 21.06.2015
comment
Вы также можете определить параметр -x c, чтобы явно указать c в качестве языка для следующих входных файлов. - person splash; 22.01.2018

Добавьте E:\MinGW\bin к переменной PATH.

person ruslik    schedule 03.10.2010
comment
Если он не добавил его в PATH, приглашение даже не распознает gcc как программу. - person Leonardo Raele; 04.10.2013

У меня была такая же проблема (у меня cygwin)

Запуск оболочки через cygwin.bat не помог, но запуск оболочки через MingWShell помог. Не совсем уверен, почему, но я думаю, что это как-то связано с дополнительным слоем, который cygwin помещает между исполняемым скриптом и базовой файловой системой.

Я запускал установку pip из cygwin виртуальной среды, чтобы установить django sentry.

person Trent    schedule 25.04.2012
comment
как загрузить mingwshell? - person barlop; 13.07.2015
comment
Это хороший вопрос. Это было давно, и с тех пор я переформатировал, но установил по памяти через mingw.org/ вики/начало_начала - person Trent; 18.07.2015
comment
Можете ли вы показать мне конкретную картинку, например. на изображениях Google, которые показывают, что такое графический интерфейс mingw, который вы имеете в виду / помните? - person barlop; 18.07.2015

(Относится к исходной проблеме)
Сегодняшняя версия mingw (см. дату публикации)
Все, что мне нужно было сделать, это указать путь в той же оболочке, что и gcc.
Мне потребовался час, чтобы вспомнить, как установить 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
person David Lambert    schedule 03.02.2013

У меня была та же проблема, и я пробовал все безрезультатно. Что решило проблему для меня, так это изменение порядка путей к библиотеке в переменной PATH. У меня был cygwin, а также некоторые другие компиляторы, поэтому, вероятно, между ними было какое-то столкновение. Что я сделал, так это поместил C:\MinGW\bin; путь сначала перед всеми другими путями, и это решило проблему для меня!

person Ioannis    schedule 12.06.2014

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

person saimadan    schedule 26.08.2014

Я получал это сообщение об ошибке, потому что использовал MinGW-w64, а все команды в <install path>\bin имели странный префикс. Я попытался вызывать исполняемые файлы в каталогах «целевой псевдоним», а не в каталогах <install path>\bin, что привело к еще большим проблемам. Согласно часто задаваемым вопросам, этого делать нельзя. Тогда решение для меня состояло в том, чтобы создать символические ссылки на все префиксные команды. Я открыл командную строку с повышенными правами и использовал что-то вроде mklink gcc.exe x86_64-w64-mingw32-gcc.exe для каждого исполняемого файла, и теперь моя сборка работает.

person Ben    schedule 17.12.2014

Хотя пост старый, у меня была такая же проблема с mingw32 версии 4.8.1 13 февраля 2015 г. С этим сообщением произошла ошибка компиляции с использованием Eclipse CDT. Попытка из командной строки с параметром -v также не удалась. Мне также не хватало исполняемого файла cc1plus.

Причина: я скачал командную строку и графический установщик с сайта mingw32. Я использовал это для начальной установки mingw32. Используя графический интерфейс, я выбрал базовые инструменты, выбрав компиляторы c и c++.

Этот установщик выполнил неполную установку 32-битного компилятора С++. У меня были файлы g++ и cpp, но не исполняемый файл cc1plus. Попытка выполнить «обновление» не удалась, потому что установщик предположил, что у меня все установлено.

Чтобы исправить это, я нашел эти сайты: http://mingw-w64.sourceforge.net/ http://sourceforge.net/projects/mingw-w64/ Я загрузил и запустил эту "онлайн-установку" . Конечно же, этот содержал недостающие файлы. Я изменил свою переменную PATH и указал на папку «bin», содержащую исполняемый файл g++. Перезагружен. Установил 64 битный Eclipse. Открыт Eclipse и программа "Hello World" c++, скомпилированная, выполненная и отлаженная должным образом.

Примечание. Похоже, что 64-битный установщик по умолчанию использует настройки UNIX. Почему установщик не может определить ОС??? Обязательно измените их.

Я потратил на это весь вечер. Надеюсь, это поможет кому-то.

person user4567472    schedule 14.02.2015
comment
Поскольку проект mingw-w64 на sourceforge.net перемещается на mingw-w64.org, я предлагаю использовать mingw-w64.org< /а> - person POQDavid; 02.07.2015

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

У меня уже был установлен компилятор g++ через MinGW (пакет mingw32-gcc-g++), но мне нужен был компилятор C, поэтому я запустил mingw-get-setup.exe, где он смог установить Пакет mingw32-base с компилятором C.

Увы! У меня была эта ошибка, когда я использую gcc для компиляции:

gcc: ошибка: createprocess: нет такого файла или каталога

Что я сделал, так это, все еще используя диспетчер установки MinGW, я удалил пакеты компилятора C и C++, а именно mingw32-base и mingw32-gcc-g++, а ТАКЖЕ удалил пакеты C :\MinGW сам каталог. Затем я перезапустил mingw-get-setup.exe, установил mingw32-base и вуаля, все заработало :)

person PFrancisco    schedule 03.08.2015

Для меня эта ошибка начала возникать, когда длина командной строки превысила предел cygwin. Что было 32000 байт.

Вы можете проверить лимит с помощью этой команды:

$ getconf ARG_MAX
32000

Решение в проекте, над которым я работаю, еще не завершено, но возможные решения включают:

  • используя двоичные файлы, созданные из библиотек ссылок, вместо того, чтобы собирать их из всех файлов проекта.
  • сокращение имен каталогов, содержащих много файлов исходного кода, поскольку имена каталогов повторяются несколько раз.
  • просмотр списка файлов, используемых компоновщиком.

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

person Dominic Clifton    schedule 23.11.2020

Решение для меня простое:

  1. Когда вы сохраняете программу, скажем, с именем hi.cpp, поместите ее в папку, например. xxl, затем сохраните программу.

  2. Вырежьте эту папку и поместите ее в папку bin файла mingw.

  3. При вызове программы:

    ------ g++ xxl\hi.cpp --------
    
person sam    schedule 15.05.2012