make: interruzione / eccezione rilevata


33

Sto usando Make dalla distribuzione MinGW. Ha sempre funzionato, ma recentemente ho avuto il seguente errore:

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

E la rispettiva parte si presenta così:

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)

Non ho idea di cosa sia la causa. Soprattutto perché ha sempre funzionato perfettamente.


1
Hai provato ad aggiornare make? gnu.org/software/make
Fabián Heredia Montiel il

Risposte:


46

Stavo iniziando a ottenere anche un'eccezione:

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

Potrebbe essere un motivo diverso, ma questo problema è apparentemente causata quando la variabile PATH contiene parentesi (, ), come fa su Win Vista / 7. Sfortunatamente, la GNU disponibile per Windows è irrimediabilmente obsoleta.

Il mio problema è stato risolto forzando l' makeuso della shell corretta: inserisci la seguente riga all'inizio del tuo makefile.

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

Ottima soluzione, ma non so perché non funzionasse, non ho parentesi nelle variabili Environment
forsubhi

1
Potrebbe essere correlato anche alla lunghezza del PERCORSO? Nel mio caso, il mio PERCORSO aveva già un sacco di parentesi senza problemi (fino a quando non ho installato più roba); sostituendo tutte le istanze di C:\Program Filescon C:\PROGRA~1e C:\Program Files (x86)con C:\PROGRA~2risolto il problema per me. +1 :-)
Cameron

Ho anche avuto questo problema e sono passato a una versione più recente di make: equation.com/servlet/equation.cmd?fa=make - Questo non ha risolto il problema, ma gestisce meglio l'eccezione e ti dice cosa sta succedendo: sh: C:\Program: No such file or directoryè la prima riga che ottengo se non passo la SHELLvariabile. Fondamentalmente ogni istanza di "Programmi" sul PERCORSO contiene uno spazio che non è sfuggito correttamente (per quanto riguarda make). Non è la lunghezza del percorso, ma gli spazi che causano questo problema. Questo spiega perché l'uso di una macro senza spazi l'ha riparata.
Johannes,

Questa soluzione ha funzionato per me.
Robert Stiffler,

8

Ho avuto questo problema quando ho aggiunto la directory bin di Git alla PATHvariabile d'ambiente. Il motivo sembra essere che Git viene fornito con una versione di MSYS e che sembra essere in conflitto con MinGW (forse non è in conflitto quando si tratta della versione giusta di MSYS e / o MinGW, ma è solo un'ipotesi).

Quindi assicurati che non ci sia (altra) distribuzione MSYS nel tuo PATH.


1
Il percorso Git alla directory bin era il problema per me! Molto bene !
TridenT

3

Più avanti alla risposta di Norbet P., ho scoperto che aggiungendo:

PATH=

all'inizio del mio Makefile ho risolto questo particolare problema per me.


1
Non sto dando un -1, ma questa è una risposta orribilmente negativa. Non puoi semplicemente ripristinare PATH !!! questa è una brutta pratica! alcune volte la compilazione del programma dipende dalle informazioni nel PERCORSO.
Il fisico quantistico


2

Ho usato GnuWin fino a quando mi sono reso conto che l'ultima versione è stata pubblicata il 26 novembre 2006 . Questo è un po 'zoppo, e ha causato problemi come visto sopra. L'impostazione SHELL = C: /Windows/System32/cmd.exe risolve alcuni problemi ma l'esecuzione di un codice così vecchio su nuovi sistemi operativi non è sicura

MinGw è una scommessa più sicura. MinGw è l'acronimo di "Minimalist GNU for Windows" ed è aggiornato e include make e altri strumenti

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


1
Hai persino letto la domanda?
orlp

1

Il codice di errore di Windows 0xC0000005indica una violazione di accesso o un errore di segmentazione.

  • La tua installazione di MinGW è danneggiata?
  • Il tuo sistema è configurato correttamente? Qualche impostazione di sistema è stata modificata di recente?
  • Ci sono problemi hardware sul tuo sistema? Potrebbe essere necessario eseguire la scansione del disco rigido utilizzando CHKDSK o eseguire un test di memoria come Memtest86 + .

-1

Ho notato nei miei log di compilazione che "SHELL = sh" veniva passato per essere creato, anche se sono su una piattaforma Windows. Il mio Makfile era simile al seguente:

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

Una volta ho commentato ifneq e alla fine ha iniziato a funzionare. Non sono sicuro del motivo per cui la piattaforma non è stata interpretata correttamente.


1
Questa non è una risposta alla domanda originale. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post: puoi sempre commentare i tuoi post e una volta che avrai una reputazione sufficiente sarai in grado di commentare qualsiasi post .
DavidPostill
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.