make: Interruption / Exception interceptée

31

J'utilise Make de la distribution MinGW. Cela a toujours fonctionné, mais récemment, j'ai l'erreur suivante:

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

Et la partie respective ressemble à ceci:

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)

Je n'ai aucune idée de ce qui cause cela. Surtout parce que cela a toujours fonctionné parfaitement bien.

orlp
la source
1
Avez-vous essayé de mettre à jour make? gnu.org/software/make
Fabián Heredia Montiel

Réponses:

43

Je commençais aussi à avoir une exception:

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

Peut-être une raison différente, mais ce problème est apparemment dû au fait que la variable PATH contient des parenthèses (, ), comme sur Windows Vista / 7. Malheureusement, la version disponible de GNU pour Windows est désespérément obsolète.

Mon problème a été résolu en forçant make utilisez le shell correct: insérez la ligne suivante au début de votre makefile.

SHELL=C:/Windows/System32/cmd.exe
Norbert P.
la source
Excellente solution, mais je ne sais pas pourquoi cela ne fonctionnait pas, je n'ai pas de parenthèses dans mes variables d'environnement
forsubhi
1
Peut-être lié à la longueur du PATH aussi? Dans mon cas, mon PATH avait déjà beaucoup de parenthèses sans aucun problème (jusqu’à ce que j’ai installé plus de choses); remplacer toutes les instances de C:\Program Files avec C:\PROGRA~1 et C:\Program Files (x86) avec C:\PROGRA~2 résolu le problème pour moi. +1 :-)
Cameron
J'ai également eu ce problème et je suis passé à une version plus récente de make: equation.com/servlet/equation.cmd?fa=make - Cela n'a pas résolu le problème, mais il gère mieux l'exception et vous dit ce qui se passe: sh: C:\Program: No such file or directory est la première ligne que je reçois si je ne passe pas dans la SHELL variable. En gros, chaque instance de "Program Files" sur PATH contient un espace qui n'est pas échappé correctement (en ce qui concerne make). Ce n'est pas la longueur du chemin, mais les espaces qui causent ce problème. Ceci explique pourquoi l’utilisation d’une macro sans espaces la corrige.
Johannes
Cette solution a fonctionné pour moi.
Robert Stiffler
8

J'ai eu ce problème quand j'ai ajouté le répertoire bin de Git au PATH variable d'environnement. La raison semble être que Git est livré avec une version de MSYS et que cela semble entrer en conflit avec MinGW (peut-être que ce n'est pas le cas lorsqu'il s'agit de la bonne version de MSYS et / ou de MinGW mais que ce n'est que devinettes).

Assurez-vous donc qu’il n’ya pas (d’autre) distribution MSYS dans votre PATH.

Ignitor
la source
1
chemin git dans le répertoire bin était le problème pour moi! Bien joué !
TridenT
3

Suite à la réponse de Norbert P., j’ai trouvé que l’ajout:

PATH=

au sommet de mon Makefile corrigé ce problème particulier pour moi.

Mark Tolley
la source
Je ne donne pas un -1, mais c'est une réponse horriblement mauvaise. Vous ne pouvez pas simplement réinitialiser PATH !!! c'est une très mauvaise pratique! Parfois, la compilation d'un programme dépend des informations contenues dans PATH.
The Quantum Physicist
3

Ce make bug est corrigé au moins dans

GNU Make 3.82
Built for i686-pc-mingw32

.

Armali
la source
Où puis-je obtenir cette version?
SHOUBHIK BOSE
1
IIRC, je l'ai eu de ici .
Armali
2

J'ai utilisé GnuWin jusqu'à ce que je réalise que la dernière version avait été publiée le 26 novembre 2006 . C'est un peu boiteux, et a causé de tels problèmes que vu ci-dessus. La définition de SHELL = C: /Windows/System32/cmd.exe résout certains problèmes, mais l'exécution d'un tel ancien code sur de nouveaux systèmes d'exploitation semble dangereuse.

MinGw est un pari plus sûr. MinGw est l'acronyme de "Minimalist GNU for Windows" et est à jour et comprend la marque et d'autres outils.

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

user246954
la source
1
Avez-vous même lu la question?
orlp
1

Le code d'erreur Windows 0xC0000005 indique une violation d'accès ou une erreur de segmentation.

  • Votre installation de MinGW est-elle corrompue?
  • Votre système est-il configuré correctement? Des paramètres système ont-ils changé récemment?
  • Existe-t-il des problèmes matériels sur votre système? Vous devrez peut-être analyser le disque dur à l’aide de CHKDSK ou effectuer un test de mémoire tel que Memtest86 + .
bwDraco
la source
0

J'ai remarqué dans mes journaux de compilation que "SHELL = sh" était transmis, alors que je suis sur la plate-forme Windows. Mon Makfile ressemblait à ceci:

ifneq (, $ (findstring win, $ (RDI_PLATFORM))))  SHELL = CMD fin si

Une fois, j'ai commenté le ifneq et la fin, il a commencé à fonctionner. Vous ne savez pas pourquoi la plate-forme n'a pas été interprétée correctement.

martinv
la source
C'est ne pas une réponse à la question initiale. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire en dessous de son message - vous pouvez toujours commenter vos propres messages, et une fois que vous en avez suffisamment réputation vous serez en mesure de commenter n'importe quel post .
DavidPostill