make: Interrupção / exceção detectada


33

Estou usando o Make da distribuição MinGW. Sempre funcionou, mas recentemente recebi o seguinte erro:

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

E a parte respectiva fica assim:

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)

Não tenho ideia do que causa isso. Especialmente porque sempre funcionou perfeitamente bem.


11
Você já tentou atualizar o make? gnu.org/software/make
Fabián Heredia Montiel

Respostas:


46

Eu estava começando a receber uma exceção também:

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

Pode ser um motivo diferente, mas este problema é aparentemente causado quando a variável PATH contém parênteses (, ), como faz em Win Vista / 7. Infelizmente, o GNU disponível para Windows está irremediavelmente desatualizado.

Meu problema foi corrigido forçando o makeuso do shell correto: insira a seguinte linha no início do seu makefile.

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

Grande solução, mas eu não sei por que ele não estava trabalhando, eu não tenho parênteses em meus variáveis de ambiente
forsubhi

11
Também pode estar relacionado ao comprimento do CAMINHO? No meu caso, meu PATH já tinha muitos parênteses sem problemas (até eu instalar mais algumas coisas); substituir todas as instâncias de C:\Program Filescom C:\PROGRA~1e C:\Program Files (x86)com C:\PROGRA~2corrigiu o problema para mim. +1 :-)
Cameron

Eu também tive esse problema, e mudou para uma versão mais recente do make: equation.com/servlet/equation.cmd?fa=make - Isso não corrigir o problema, mas ele lida com a exceção melhor e diz-lhe o que está acontecendo: sh: C:\Program: No such file or directoryé a primeira linha que recebo se não passar a SHELLvariável Basicamente, cada instância de "Arquivos de Programas" no PATH contém um espaço que não é escapado corretamente (no que diz respeito ao make). Não é o comprimento do caminho, mas os espaços que estão causando esse problema. Isso explica por que o uso de uma macro sem espaços a corrigiu.
Johannes

Esta solução funcionou para mim.
Robert Stiffler 31/03

8

Eu tive esse problema quando adicionei o diretório bin do Git à PATHvariável de ambiente. O motivo parece ser que o Git é fornecido com uma versão do MSYS e isso parece entrar em conflito com o MinGW (talvez não entre em conflito quando é a versão correta do MSYS e / ou MinGW, mas isso é apenas um palpite).

Portanto, verifique se não há nenhuma (outra) distribuição MSYS no seu PATH.


11
O caminho do Git para o diretório bin foi o problema para mim! Bem feito !
Trident

3

Além da resposta de Norbet P., achei que acrescentando:

PATH=

para o topo do meu Makefile corrigiu esse problema em particular para mim.


11
Não estou dando -1, mas essa é uma resposta horrivelmente ruim. Você não pode simplesmente redefinir o PATH !!! isso é uma prática muito ruim! algumas vezes a compilação do programa depende das informações no PATH.
The Quantum Physicist


2

Usei o GnuWin até perceber que a última versão foi postada em 26 de novembro de 2006 . Isso é um pouco coxo e causou problemas como visto acima. Definir SHELL = C: /Windows/System32/cmd.exe resolve alguns problemas, mas a execução de código antigo em novos sistemas operacionais parece insegura

MinGw é uma aposta mais segura. MinGw é acrônimo para "Minimalist GNU for Windows" e está atualizado e inclui marcas e outras ferramentas

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


11
Você leu a pergunta?
orlp

1

O código de erro do Windows 0xC0000005indica uma violação de acesso ou falha de segmentação.

  • Sua instalação do MinGW está corrompida?
  • O seu sistema está configurado corretamente? Alguma configuração do sistema mudou recentemente?
  • Existem problemas de hardware no seu sistema? Pode ser necessário verificar o disco rígido usando o CHKDSK ou executar um teste de memória como o Memtest86 + .

-1

Percebi nos meus logs de compilação que "SHELL = sh" estava sendo passado para ser feito, mesmo estando na plataforma Windows. Meu Makfile ficou assim:

ifneq (, $ (vitória da busca, $ (RDI_PLATFORM))) SHELL = endif CMD

Uma vez eu comentei o ifneq e o final começou a funcionar. Não sei por que a plataforma não foi interpretada corretamente.


11
Esta não é uma resposta para a pergunta original. Para criticar ou solicitar esclarecimentos a um autor, deixe um comentário abaixo da postagem - você sempre pode comentar em suas próprias postagens e, quando tiver reputação suficiente , poderá comentar em qualquer post .
DavidPostill
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.