ทำให้: จับขัดจังหวะ / ยกเว้น


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)

อาจจะมีเหตุผลที่แตกต่างกัน แต่ปัญหานี้จะเห็นได้ชัดว่าเกิดขึ้นเมื่อตัวแปรเส้นทางมีวงเล็บ(, ), มันไม่เกี่ยวกับ Win Vista / 7 น่าเสียดายที่ GNU สำหรับ Windows ที่มีอยู่นั้นล้าสมัยไปหมดแล้ว

ปัญหาของฉันได้รับการแก้ไขโดยบังคับให้makeใช้เชลล์ที่ถูกต้อง: แทรกบรรทัดต่อไปนี้ที่จุดเริ่มต้นของ makefile ของคุณ

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

ทางออกที่ดี แต่ฉันไม่รู้ว่าทำไมมันไม่ทำงานฉันไม่มีวงเล็บในตัวแปรสภาพแวดล้อมของฉัน
forsubhi

1
อาจเกี่ยวข้องกับความยาวของ PATH ด้วยหรือไม่ ในกรณีของฉัน PATH ของฉันมีวงเล็บจำนวนมากอยู่แล้วโดยไม่มีปัญหาใด ๆ (จนกว่าฉันจะติดตั้งอะไรเพิ่มเติม) การแทนที่อินสแตนซ์ทั้งหมดของC:\Program Filesด้วยC:\PROGRA~1และC:\Program Files (x86)ด้วยC:\PROGRA~2แก้ไขปัญหาให้ฉัน +1 :-)
คาเมรอน

ฉันยังมีปัญหานี้และเปลี่ยนไปใช้เวอร์ชันที่ใหม่กว่า: equation.com/servlet/equation.cmd?fa=make - สิ่งนี้ไม่ได้แก้ไขปัญหา แต่จัดการข้อยกเว้นได้ดีขึ้นและบอกคุณว่าเกิดอะไรขึ้น: sh: C:\Program: No such file or directoryคือ บรรทัดแรกที่ฉันได้รับถ้าฉันไม่ผ่านSHELLตัวแปร โดยทั่วไปแต่ละอินสแตนซ์ของ "Program Files" บน PATH จะมีช่องว่างที่ไม่สามารถทำการหลบหนีได้อย่างถูกต้อง ไม่ใช่ความยาวของเส้นทาง แต่เป็นช่องว่างที่ทำให้เกิดปัญหานี้ สิ่งนี้อธิบายว่าทำไมการใช้มาโครโดยไม่มีช่องว่างได้แก้ไข
โยฮันเนส

วิธีนี้ใช้ได้ผลสำหรับฉัน
Robert Stiffler

8

ฉันมีปัญหานั้นเมื่อฉันเพิ่มไดเรกทอรี bin ของ Git ไปยังPATHตัวแปรสภาพแวดล้อม เหตุผลน่าจะเป็นที่ Git มาพร้อมกับ MSYS รุ่นหนึ่งและดูเหมือนจะขัดแย้งกับ MinGW (อาจจะไม่ขัดแย้งกันเมื่อเป็นรุ่นที่เหมาะสมของ MSYS และ / หรือ MinGW แต่นั่นเป็นเพียงการคาดเดา)

เพื่อให้แน่ใจว่าไม่มี (อื่น ๆ ) การกระจาย MSYS PATHในของคุณ


1
เส้นทาง Git ไปยังไดเรกทอรี bin เป็นปัญหาสำหรับฉัน! ทำได้ดี !
TridenT

3

ยิ่งกว่าคำตอบของ Norbet P. ฉันพบว่าการเพิ่ม:

PATH=

ที่ด้านบนของ Makefile ของฉันแก้ไขปัญหานี้โดยเฉพาะสำหรับฉัน


1
ฉันไม่ได้ให้ -1 แต่นี่เป็นคำตอบที่แย่มาก คุณไม่สามารถรีเซ็ต PATH !!! นี่เป็นการฝึกฝนที่แย่มาก! บางครั้งการรวบรวมโปรแกรมจะขึ้นอยู่กับข้อมูลใน PATH
นักฟิสิกส์ควอนตัม

3

นี้makeข้อผิดพลาดได้รับการแก้ไขอย่างน้อยใน

GNU Make 3.82
Built for i686-pc-mingw32

.


ฉันจะรับเวอร์ชันนี้จากที่ไหน
SHOUBHIK BOSE

1
IIRC ผมได้รับมันจากที่นี่
Armali

2

ผมใช้ GnuWin จนกว่าฉันจะตระหนักถึงการเปิดตัวสุดท้ายถูกโพสต์กลับมาอยู่ใน 26 พฤศจิกายนใน2006 นั่นเป็นบิตเล็กน้อยและก่อให้เกิดปัญหาดังที่เห็นด้านบน การตั้งค่า SHELL = C: /Windows/System32/cmd.exe จะแก้ปัญหาบางอย่าง แต่การเรียกใช้รหัสเก่าเช่นนั้นใน operatingsystems ใหม่รู้สึกไม่ปลอดภัย

MinGw เป็นเดิมพันที่ปลอดภัยยิ่งขึ้น MinGw เป็นตัวย่อสำหรับ "Minimalist GNU สำหรับ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.