thực hiện: Ngắt / Ngoại lệ bắt


33

Tôi đang sử dụng Make từ bản phân phối MinGW. Nó luôn hoạt động, nhưng gần đây tôi đã gặp phải lỗi sau:

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

Và phần tương ứng trông như thế này:

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)

Tôi không biết những gì gây ra điều này. Đặc biệt bởi vì nó luôn luôn làm việc hoàn toàn tốt.


1
Bạn đã thử cập nhật làm cho? gnu.org/software/make
Fabián Heredia Montiel

Câu trả lời:


46

Tôi cũng bắt đầu có một ngoại lệ:

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

Có thể là một lý do khác nhau, nhưng vấn đề này rõ ràng là do khi biến PATH chứa ngoặc (, )khi nó hiện trên Win Vista / 7. Thật không may, GNU có sẵn cho Windows đã lỗi thời.

Vấn đề của tôi đã được khắc phục bằng cách buộc makesử dụng shell chính xác: chèn dòng sau vào phần bắt đầu của bạn.

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

Giải pháp tuyệt vời, nhưng tôi không biết tại sao nó không hoạt động, tôi không có dấu ngoặc đơn trong các biến Môi trường của mình
forsubhi

1
Có thể liên quan đến chiều dài của PATH quá? Trong trường hợp của tôi, PATH của tôi đã có rất nhiều dấu ngoặc đơn mà không gặp vấn đề gì (cho đến khi tôi cài đặt thêm một số nội dung); thay thế tất cả các trường hợp C:\Program FilesC:\PROGRA~1C:\Program Files (x86)với C:\PROGRA~2cố định các vấn đề đối với tôi. +1 :-)
Cameron

Tôi cũng gặp vấn đề này và đã chuyển sang phiên bản mới hơn của make: method.com/servlet/equation.cmd?fa=make - Điều này không khắc phục được vấn đề, nhưng nó xử lý ngoại lệ tốt hơn và cho bạn biết điều gì đang xảy ra: sh: C:\Program: No such file or directorylà dòng đầu tiên tôi nhận được nếu tôi không vượt qua SHELLbiến. Về cơ bản, mỗi phiên bản của "Tệp chương trình" trên PATH chứa một khoảng trắng không được thoát đúng cách (theo như liên quan đến thực hiện). Nó không phải là chiều dài của con đường, mà là không gian gây ra vấn đề này. Điều này giải thích tại sao sử dụng macro không có khoảng trắng cố định nó.
Johannes

Giải pháp này đã làm việc cho tôi.
Robert Stiffler

8

Tôi gặp vấn đề đó khi tôi thêm thư mục bin của Git vào PATHbiến môi trường. Lý do có vẻ là Git vận chuyển với một phiên bản MSYS và điều đó dường như mâu thuẫn với MinGW (có thể nó không xung đột khi đó là phiên bản phù hợp của MSYS và / hoặc MinGW nhưng đó chỉ là phỏng đoán).

Vì vậy, hãy chắc chắn rằng không có phân phối MSYS (khác) trong của bạn PATH.


1
Đường dẫn Git đến thư mục bin là vấn đề đối với tôi! Làm tốt !
TridenT

3

Tiếp theo câu trả lời của Norbet P., tôi thấy rằng thêm:

PATH=

đến đầu Makefile của tôi đã khắc phục vấn đề đặc biệt này cho tôi.


1
Tôi không đưa ra -1, nhưng đây là một câu trả lời tồi tệ. Bạn không thể thiết lập lại PATH !!! Đây là thực tế rất xấu! một số lần biên dịch chương trình phụ thuộc vào thông tin trong PATH.
Nhà vật lý lượng tử

3

Đây makelỗi được cố định ít nhất trong

GNU Make 3.82
Built for i686-pc-mingw32

.


Tôi lấy phiên bản này từ đâu?
SHOUBHIK BOSE

1
IIRC, tôi đã nhận nó từ đây .
Armali

2

Tôi đã sử dụng GnuWin cho đến khi tôi nhận ra bản phát hành cuối cùng được đăng lại vào ngày 26 tháng 11 năm 2006 . Đó là một chút khập khiễng, và gây ra những vấn đề như đã thấy ở trên. Đặt SHELL = C: /Windows/System32/cmd.exe sẽ giải quyết một số vấn đề nhưng việc chạy mã cũ như vậy trên các hệ điều hành mới cảm thấy không an toàn

MinGw là một đặt cược an toàn hơn. MinGw là từ viết tắt của "Minimalist GNU for Windows" và được cập nhật và bao gồm make và các công cụ khác

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


1
Bạn thậm chí đã đọc câu hỏi?
orlp

1

Mã lỗi Windows 0xC0000005cho biết vi phạm quyền truy cập hoặc lỗi phân đoạn.

  • Cài đặt MinGW của bạn có bị hỏng không?
  • Hệ thống của bạn có được cấu hình đúng không? Có bất kỳ cài đặt hệ thống thay đổi gần đây?
  • Có vấn đề phần cứng trên hệ thống của bạn? Bạn có thể cần quét ổ cứng bằng CHKDSK hoặc thực hiện kiểm tra bộ nhớ, chẳng hạn như Memtest86 + .

-1

Tôi nhận thấy trong nhật ký biên dịch của mình rằng "SHELL = sh" đã được thông qua để thực hiện, mặc dù tôi đang ở trên nền tảng windows. Makfile của tôi trông như thế này:

ifneq (, $ (thắng chuỗi tìm kiếm, $ (RDI_PLATFORM))) SHELL = CMD endif

Khi tôi nhận xét ifneq và kết thúc nó bắt đầu hoạt động. Không chắc chắn tại sao nền tảng không được giải thích chính xác.


1
Đây không phải là một câu trả lời cho câu hỏi ban đầu. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của riêng bạn và khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào .
DavidPostill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.