2013-07-01 5 views
5

어제 제가 Allegro 5를 다운로드하여 설치하고 사용하기로 결정했습니다. Code : Blocks 12.11 with MinGW 컴파일러. 나는 모든 것을 설정하고 정확하게 모든 것을 설치 (또는 그렇게 생각)하고 일하는 것이 있는지 확인하기 위해 샘플 코드를 실행하려고 :프로 시저 엔트리 포인트 _gxx_personality_v0을 동적 링크 라이브러리 libstdC++ - 6.dll 오류에서 찾을 수 없습니다.

#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; 
} 

을 나는 오류 메시지 상자가 말하는 나타나는 프로그램을 컴파일하고 실행하려고하면 "프로 시저 엔트리 포인트 _gxx_personality_v0을 (를) 동적 링크 라이브러리 libstdC++ - 6.dll에 찾을 수 없습니다." 나는 대부분의 일과 마찬가지로이 문제에 대한 해결책을 찾기 위해 약 1 시간 동안 웹을 검색했지만 빈 손으로 나왔다. 나는 누군가가이 문제에 대한 수정을위한 아이디어를 갖고 있는지 궁금해한다. 만약 그렇다면 최대한 빨리 알려줘! 미리 감사드립니다!

+0

gcc -v는 무엇을 제공합니까? 다운로드 한 Allegro의 버전과 일치합니까? ? – Matthew

답변

8

__gxx_personality_v0은 C++ 라이브러리의 예외 처리에 사용됩니다. MinGW는 x86에서 몇 가지 예외 모델을 지원합니다 : sjlj (setjmp/longjmp) 또는 DWARF (DW2). 내가 아는 한, 어떤 모델이 사용될지는 컴파일러에 컴파일됩니다. 커맨드 라인 옵션으로 선택할 수있는 것은 아닙니다.

sjlj 예외 모델은 __gxx_personality_sj0으로, DW2 예외 모델은 __gxx_personality_v0으로 연결됩니다. 귀하의 컴파일러가 dw2 예외 모델을 구축하고있는 것처럼 보이지만 런타임에 sjlj 모델로 구축 된 libstdc++-6.dll을 찾습니다. youR 시스템에 여러 버전의 libstdc++-6.dll이 있는지 확인하고 다른 프로그램을 프로그램과 동일한 디렉토리에 복사하면 문제가 해결되는지 확인하십시오.

nm libstdc++-6.dll | grep personality을 사용하면 DLL에서 사용중인 '특성'예외를 확인할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다! 내 전체 컴퓨터를 검색하여 MinGW bin 폴더에있는 것을 제외하고 그 이름으로 다른 .dll을 찾을 수 없습니다. 프로젝트 폴더에 추가하고 컴파일하고 실행하려고했지만 그것은 여전히 ​​같은 오류를 반환했다 : ( – TobyFromMarketing

+0

'nm libstdC++ - 6.dll | grep personality'는 무엇을 말합니까? –

+0

Ah-이 프로그램은 미리 빌드 된 DLL에 의존합니까?) 만약 그렇다면 아마도 컴파일러가'sjlj'이고 DLL 중 하나 이상이'dw2' 예외 처리를 기대하고 빌드했을 것입니다. 모든 라이브러리를 직접 만들거나 lternative 라이브러리는 컴파일러의 예외 처리와 일치하도록 빌드됩니다 (또는 MinGW 컴파일러를 dw2 예외 처리를 사용하는 것으로 전환 할 수 있습니다). –

1

이 문제도 발생했습니다. 검색 중 일부를 언급했는데, 사용자가 디버그 또는 릴리스 모드에 있는지 여부에주의를 기울였습니다. 이것은 Code :: Blocks에만 적용됩니다. 디버그 모드에 있음을 발견했습니다. 릴리스 모드로 변경하고 프로그램을 컴파일하고 실행했습니다.

나는 이것에 문제가있다 ... 나에게 그것은 두 가지 모드에서 모두 작동해야한다. 그래서 그것을 어떻게 고칠 수 있을까? 거기에는 대답이 없습니다. 어쩌면 누군가가 해결책에 대해 논평 할 것입니다. 그 동안 디버그 모드 대신 릴리스 모드에서 컴파일하고 실행하십시오.

방금 ​​약간의 미친 과학을했는데 MinGW/bin에서 libstdC++ 6.dll을 제거하고 다른 폴더에 넣었습니다. 그런 다음 Gimp/bin에서 같은 파일을 복사했습니다. 더 이상 링커 오류가 발생하지 않아 응용 프로그램을 시작할 수 없다는 오류가 발생합니다. (여전히 컴파일되고 릴리스 모드로 실행됩니다.)

관련 문제