make: Прерывание / Исключение поймано

33

Я использую Make из дистрибутива MinGW. Это всегда работало, но недавно я получил следующую ошибку:

> make clean
make: Interrupt/Exception caught (code = 0xc0000005, addr = 0x0040b0ac)

И соответствующая часть выглядит так:

clean:
    del /S /Q *.o > nul
    del /S /Q *.cy.c > nul
    del /S /Q *.pyc > nul
    del /S /Q *.pyo > nul
    if EXIST build (rmdir /S /Q dist > nul)

Я понятия не имею, что вызывает это. Тем более, что он всегда работал отлично.

orlp
источник
1
Вы пробовали обновить make? gnu.org/software/make
Фабиан Эредиа Монтиэль

Ответы:

46

Я также начал получать исключение:

make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4227d3)

Может быть другая причина, но эта проблема, по- видимому возникает , когда переменная PATH содержит круглые скобки (, )как это делает на Win Vista / 7. К сожалению, доступный GNU для Windows безнадежно устарел.

Моя проблема была исправлена ​​путем принудительного makeиспользования правильной оболочки: вставьте следующую строку в начало вашего make-файла.

SHELL=C:/Windows/System32/cmd.exe
Норберт П.
источник
Отличное решение, но я не знаю, почему оно не работает, у меня нет скобок в переменных среды
forsubhi
1
Может ли быть связано с длиной пути? В моем случае у моего PATH уже было много скобок без проблем (пока я не установил еще кое-что); замена всех экземпляров C:\Program Filesс C:\PROGRA~1и C:\Program Files (x86)с C:\PROGRA~2исправила проблему для меня. +1 :-)
Кэмерон
Я также имел эту проблему, и перешел на более новую версию макияжа: equation.com/servlet/equation.cmd?fa=make - Это не решить эту проблему, но она обрабатывает исключение лучше и говорит вам , что происходит: sh: C:\Program: No such file or directoryесть первая строка, которую я получу, если не передам SHELLпеременную. По сути, каждый экземпляр «Program Files» в PATH содержит пробел, который не экранирован должным образом (что касается make). Это не длина пути, а пробелы, которые вызывают эту проблему. Это объясняет, почему с помощью макроса без пробелов это исправлено.
Йоханнес
Это решение сработало для меня.
Роберт Стиффлер
8

У меня была такая проблема, когда я добавил каталог bin в Git в PATHпеременную окружения. Кажется, причина в том, что Git поставляется с версией MSYS, и это, кажется, конфликтует с MinGW (возможно, это не конфликтует, когда это правильная версия MSYS и / или MinGW, но это только предположение).

Поэтому убедитесь, что в вашем (нет) дистрибутиве MSYS нет PATH.

Ignitor
источник
1
Git путь к каталогу bin был проблемой для меня! Отлично сработано !
TridenT
3

Далее к ответу Норбет П. я обнаружил, что добавление:

PATH=

к началу моего Makefile исправил эту конкретную проблему для меня.

Марк Толи
источник
1
Я не даю -1, но это ужасно плохой ответ. Вы не можете просто сбросить PATH !!! это очень плохая практика! иногда компиляция программы зависит от информации в PATH.
Квантовый физик
3

Эта makeошибка исправлена ​​как минимум в

GNU Make 3.82
Built for i686-pc-mingw32

,

Armali
источник
Где я могу получить эту версию?
SHOUBHIK BOSE
1
IIRC, я получил это отсюда .
Armali
2

Я использовал GnuWin, пока не понял, что последний релиз был опубликован 26 ноября 2006 года . Это немного неубедительно, и вызвало такие проблемы, как видно выше. Настройка SHELL = C: /Windows/System32/cmd.exe действительно решает некоторые проблемы, но запуск такого старого кода на новых операционных системах кажется небезопасным

MinGw - более безопасная ставка. MinGw является аббревиатурой от «Minimalist GNU for Windows» и является современным и включает в себя make и другие инструменты

http://sourceforge.net/projects/mingw/files/

user246954
источник
1
Ты вообще читал вопрос?
orlp
1

Код ошибки Windows 0xC0000005указывает на нарушение прав доступа или ошибку сегментации.

  • Ваша установка MinGW повреждена?
  • Ваша система настроена правильно? Изменились ли недавно системные настройки?
  • Есть ли проблемы с оборудованием в вашей системе? Вам может понадобиться отсканировать жесткий диск с помощью CHKDSK или выполнить тест памяти, такой как Memtest86 + .
bwDraco
источник
-1

Я заметил в моих журналах компиляции, что "SHELL = sh" передавался для создания, хотя я на платформе Windows. Мой Макфайл выглядел так:

ifneq (, $ (победа findstring, $ (RDI_PLATFORM))) SHELL = CMD endif

Однажды я прокомментировал ifneq и в конце он начал работать. Не уверен, почему платформа не была правильно интерпретирована.

martinv
источник
1
Это не ответ на оригинальный вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его постом - вы всегда можете комментировать свои собственные посты, и, когда у вас будет достаточно репутации, вы сможете комментировать любые посты .
DavidPostill