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)

Я поняття не маю, що це викликає. Тим більше, що це завжди вийшло чудово.


1
Ви спробували оновити марку? gnu.org/software/make
Fabián Heredia Montiel

Відповіді:


46

Я також починав отримувати виняток:

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

Можливо, це буде інша причина, але ця проблема, мабуть, викликана, коли змінна PATH містить круглі дужки ( , )як це робить на Win Vista / 7. На жаль, доступний GNU для Windows безнадійно застарів.

Мою проблему виправили, makeвикористовуючи правильну оболонку: вставте наступний рядок на початку вашого makefile.

SHELL=C:/Windows/System32/cmd.exe

Прекрасне рішення, але я не знаю, чому це не працює, у мене немає дужок у змінних оточення
forsubhi

1
Чи може бути пов'язана також довжина ПАТХ? У моєму випадку мій PATH вже мав безліч дужок без проблем (доки я не встановив ще деякі речі); замінюючи всі випадки C:\Program Filesз C:\PROGRA~1і C:\Program Files (x86)з C:\PROGRA~2фіксованою проблемою для мене. +1 :-)
Камерон

У мене також виникла ця проблема, і я перейшов на більш нову версію make: equation.com/servlet/equation.cmd?fa=make - Це не виправило проблему, але вона обробляє виняток краще і повідомляє вам, що відбувається: sh: C:\Program: No such file or directoryє перший рядок я отримую, якщо не переходжу в SHELLзмінну. В основному кожен екземпляр "Файлів програми" на PATH містить простір, який не вийшов належним чином (наскільки це стосується make). Ця проблема викликає не довжину шляху, а пробіли. Це пояснює, чому використання макросу без пробілів виправлено його.
Йоганнес

Це рішення працювало на мене.
Роберт Стіффлер

8

У мене виникла ця проблема, коли я додав у каталог біт Git до PATH змінної середовища. Здається, причина полягає в тому, що Git постачається з версією MSYS і, здається, суперечить MinGW (можливо, він не конфліктує, коли це правильна версія MSYS та / або MinGW, але це лише здогадки).

Тож переконайтесь, що у вашому каналі немає (іншого) MSYS-дистрибутива PATH.


1
Проблема Git до каталогу бін була проблемою для мене! Молодці!
TridenT

3

Швидше до відповіді Норбета П. я виявив, що додаючи:

PATH=

вгорі мого Makefile вирішив саме цю проблему для мене.


1
Я не даю -1, але це жахливо погана відповідь. Ви не можете просто скинути PATH !!! це дуже погана практика! інколи складання програми залежить від інформації в PATH.
Квантовий фізик


2

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

MinGw - більш безпечна ставка. MinGw є абревіатурою для "Minimalist GNU for Windows" і є сучасним і включає в себе виготовлення та інші інструменти

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


1
Ви навіть читали запитання?
orlp

1

Код помилки Windows 0xC0000005вказує на порушення доступу чи помилку сегментації.

  • Чи пошкоджена ваша установка MinGW?
  • Чи правильно налаштована ваша система? Чи змінилися останні налаштування системи?
  • Чи є проблеми з обладнанням у вашій системі? Можливо, вам буде потрібно сканувати жорсткий диск за допомогою CHKDSK або виконати тест пам'яті, наприклад Memtest86 + .

-1

Я помітив у своїх журналах компіляції, що "SHELL = sh" передається для виготовлення, хоча я перебуваю на платформі Windows. Мій Makfile виглядав так:

ifneq (, $ (findstring win, $ (RDI_PLATFORM))) SHELL = CMD endif

Одного разу я прокоментував ifneq і закінчив він почав працювати. Не впевнений, чому платформа не була трактована правильно.


1
Це не відповідь на початкове запитання. Щоб критикувати або вимагати роз'яснення у автора, залиште коментар під їх публікацією - ви завжди можете коментувати свої власні публікації, і як тільки у вас буде достатня репутація, ви зможете коментувати будь-яку публікацію .
DavidPostill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.