2013-07-01 32 views
5

Hôm qua tôi quyết định tải xuống, cài đặt và cố gắng sử dụng Allegro 5. Tôi cũng đã tải xuống Mã :: Blocks 12.11 w/the MinGW trình biên dịch. Tôi thiết lập tất cả mọi thứ và cài đặt tất cả mọi thứ một cách chính xác (hoặc vì vậy tôi nghĩ) và cố gắng để chạy một số mẫu mã để xem nếu nó sẽ làm việc:Không thể đặt điểm vào thủ tục _gxx_personality_v0 trong thư viện liên kết động libstdC++ - 6.dll Lỗi

#include <stdio.h> 
#include <allegro5/allegro.h> 

int main(int argc, char **argv){ 

    ALLEGRO_DISPLAY *display = NULL; 

    if(!al_init()) { 
     fprintf(stderr, "failed to initialize allegro!\n"); 
     return -1; 
    } 

    display = al_create_display(640, 480); 
    if(!display) { 
     fprintf(stderr, "failed to create display!\n"); 
     return -1; 
    } 

    al_clear_to_color(al_map_rgb(0,0,0)); 

    al_flip_display(); 

    al_rest(10.0); 

    al_destroy_display(display); 

    return 0; 
} 

Khi tôi cố gắng để biên dịch và chạy chương trình một hộp thông báo lỗi xuất hiện nói "Không thể đặt điểm vào thủ tục _gxx_personality_v0 trong thư viện liên kết động libstdC++ - 6.dll." Tôi đã tìm kiếm trên web trong khoảng một giờ để tìm cách sửa lỗi cho vấn đề này, như tôi đã làm cho hầu hết mọi thứ, nhưng tôi đã đưa tay trắng ra. Tôi tự hỏi nếu có ai có bất kỳ ý tưởng cho bất kỳ bản sửa lỗi cho vấn đề này, nếu có, hãy cho tôi biết càng sớm càng tốt! Cảm ơn trước!

+0

'gcc -' cung cấp cho bạn điều gì? Nó khớp với phiên bản Allegro bạn đã tải xuống – Matthew

Trả lời

8

__gxx_personality_v0 được sử dụng trong xử lý ngoại lệ của thư viện C++. MinGW có thể hỗ trợ một vài mô hình ngoại lệ khác nhau trên x86: sjlj (setjmp/longjmp) hoặc DWARF (DW2). Theo như tôi biết, mô hình nào sẽ được sử dụng được biên dịch vào trình biên dịch - nó không phải là một cái gì đó có thể được lựa chọn với một tùy chọn dòng lệnh.

Mô hình ngoại lệ sjlj sẽ liên kết đến __gxx_personality_sj0, mô hình ngoại lệ DW2 liên kết đến __gxx_personality_v0. Có vẻ như trình biên dịch của bạn đang xây dựng cho mô hình ngoại lệ dw2, nhưng vào thời gian chạy nó tìm thấy một libstdc++-6.dll được xây dựng với mô hình sjlj. Xem bạn có nhiều phiên bản libstdc++-6.dll trên hệ thống youR không và xem liệu sao chép một phiên bản khác vào cùng thư mục với chương trình của bạn có khắc phục được sự cố hay không.

Bạn có thể sử dụng nm libstdc++-6.dll | grep personality để xem ngoại lệ 'cá tính' mà DLL đang sử dụng.

+0

Cảm ơn bạn đã trả lời! Tôi đã tìm kiếm toàn bộ máy tính của mình và không thể tìm thấy bất kỳ tệp .dll nào khác ngoại trừ tên đó nằm trong thư mục bin MinGW. Tôi đã thử thêm nó vào thư mục dự án và biên dịch và chạy, nhưng nó vẫn trả về cùng một lỗi: ( – TobyFromMarketing

+0

những gì đang chạy 'nm libstdC++ - 6.dll | grep cá tính' nói cho nó? –

+0

Ah - hiện chương trình này phụ thuộc vào DLL được xây dựng sẵn (tức là, không biên soạn trên hệ thống của bạn Nếu vậy, có thể trình biên dịch của bạn là 'sjlj' và một hoặc nhiều trong số những DLL đó được xây dựng để trông chờ xử lý ngoại lệ' dw2'. Bạn có thể cần tự xây dựng tất cả các thư viện, hoặc có được một các thư viện bên ngoài xây dựng để phù hợp với xử lý ngoại lệ cho trình biên dịch của bạn (hoặc có thể chuyển các trình biên dịch MinGW sang một trình biên dịch sử dụng xử lý ngoại lệ dw2). –

1

Tôi cũng đã thực hiện điều này. Đã có một số tìm kiếm, ai đó đã đề cập đến việc chú ý đến việc bạn có đang ở Chế độ gỡ lỗi hoặc Chế độ phát hành hay không. Điều này áp dụng cho Code :: Blocks cụ thể. Tôi thấy mình đang ở chế độ Debug. Tôi đã thay đổi nó thành Chế độ phát hành và chương trình của tôi được biên dịch và chạy.

Tôi gặp rắc rối bởi điều này mặc dù ... Có vẻ như với tôi nó sẽ làm việc trong cả hai chế độ, vì vậy làm thế nào để sửa chữa nó để nó sẽ? Tôi không có câu trả lời ở đó. Có thể ai đó sẽ bình luận với giải pháp. Trong thời gian chờ đợi, hãy biên dịch và chạy trong Chế độ phát hành thay vì Chế độ gỡ lỗi.

Tôi vừa làm một chút khoa học điên rồ, xóa libstdC++ 6.dll khỏi MinGW/bin và đặt nó vào một thư mục khác. Sau đó, tôi sao chép trên cùng một tập tin từ Gimp/bin. Không có lỗi trình liên kết nào khác, thay vào đó tôi nhận được lỗi cho biết ứng dụng không khởi động được: (Tuy nhiên, vẫn biên dịch và chạy trong Chế độ phát hành)

Các vấn đề liên quan