gcc не работает с икру: нет такого файла или каталога

Я загрузил сборку Rubens из Cygwin GCC.

Однако при запуске он не может скомпилировать файлы

$ touch foo.c

$ gcc foo.c
gcc: error: spawn: No such file or directory

В качестве обходного пути я нашел, что это работает

i686-w64-mingw32-gcc foo.c

Ответ 1

У меня была такая же проблема на Cygwin64, и решение было связано с PATH..kinda.

Оказывается, есть копии gcc в /usr/bin и /bin (по крайней мере, есть в моей установке).

Выполнение /bin/gcc завершилось с ошибкой выше - я предполагаю, из-за неправильно принятых относительных путей???

Выполнение /usr/bin/gcc работает должным образом!

В моем случае "проблема" заключалась в том, что я непреднамеренно ввел "/bin" в свою переменную среды PATH, в результате выполнялся /bin/gcc вместо /usr/bin/gcc. Удаление "/bin" с пути разрешило проблему.

Все еще неясно, почему в разных местах есть два gcc-двоичных файла (которые кажутся одинаковыми)... но, возможно, гуру Cygwin могут ответить на это; или, может быть, моя установка просто заблокирована.

Ответ 2

У меня была та же проблема и она была решена путем установки пакета g++ в дополнение к gcc-core

Ответ 3

Конструкции Ruben не являются пакетами Cygwin GCC, скорее они являются кросс-компиляторами, которые работают на разных платформах, но нацелены на родные Windows, используя инструментальную цепочку MinGW-w64.

В любом случае, вы не должны использовать их в Cygwin. Если вы хотите скомпилировать исполняемые файлы Cygwin, установите gcc4-пакеты; если вы хотите перекрестно скомпилировать для Windows, установите вместо этого пакеты mingw64-i686-gcc (для Win32) или mingw64-x86_64-gcc (для Win64).

Ответ 4

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

Итак, gcc пытается (вроде) сказать вам, что он не может найти компилятор. Я предполагаю, что это должно быть на вашем PATH или в ожидаемом месте.

Если вы выполняете это из окна Windows DOS, то определенно требуется установка PATH для Windows.

Мне нравится устанавливать Cygwin, чтобы включить rxvt. В этот момент вы можете настроить чисто sh (1) путь, и ваша среда будет более цивилизованной.

Ответ 5

Эта ошибка возникает, когда cygwin cc не может найти требуемый файл.

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

e:cyg/bin/gcc -flags

Обратите внимание, что между e: и cyg нет косой cyg.

Таким образом, эта команда успешно запускает cygwin gcc из оболочки Windows, но на полпути через ее выполнение будет выведено из строя, потому что какой-то компонент 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

Ответ 6

Убедитесь, что расширение исходного файла находится в нижнем регистре (то есть main.c, а не 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, я не знаю реальной причины такого поведения.

Ответ 7

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

strace показывает мне файл, который не был найден икру:

/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

он отлично работает.