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.