2013-07-01 20 views
5

昨天我決定下載,安裝並嘗試使用Allegro 5.我還下載了Code :: Blocks 12.11 w/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中。」我在網上搜索了大約一個小時,試圖找到解決這個問題的辦法,就像我爲大多數事情做的一樣,但是我空手而歸。我想知道如果有人有任何解決這個問題的任何想法,如果是這樣,讓我知道盡快!提前致謝!

+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。看看你的系統上是否有多個版本的libstdc++-6.dll,並查看是否將另一個版本複製到與程序相同的目錄中以解決問題。

您可以使用nm libstdc++-6.dll | grep personality來查看該DLL正在使用哪個異常「個性」。

+0

感謝您的回覆!我搜索了我的整個計算機,並找不到任何其他.dll的名稱,除了MinGW bin文件夾中的。我嘗試將其添加到項目文件夾並編譯和運行,但它仍然返回相同的錯誤:( – TobyFromMarketing

+0

什麼運行'nm libstdC++ - 6.dll | grep personality'說吧? –

+0

啊 - 這個程序是否依賴於預先構建的DLL(即,沒有編譯到你的系統上)?如果是這樣,也許你的編譯器是'sjlj',並且這些DLL中的一個或多個是構建期望'dw2'異常處理的。你可能需要自己構建所有的庫,或者得到一個構建替代庫以匹配編譯器的異常處理(或者將MinGW編譯器切換爲使用dw2異常處理的編譯器)。 –

1

我也遇到過這個問題。做了一些搜索,有人提醒注意你是否處於調試或發佈模式。這適用於Code :: Blocks。我發現我處於調試模式。我將其更改爲發佈模式,並編譯並運行了我的程序。

雖然我受到這個困擾...在我看來它應該在兩種模式下工作,那麼我該如何解決這個問題呢?我在那裏沒有答案。也許有人會對解決方案發表評論。同時,在發佈模式下編譯並運行,而不是在調試模式下運行。

我只是做了一點瘋狂的科學,從MinGW/bin中刪除了libstdC++ 6.dll,並將它放在另一個文件夾中。然後我從Gimp/bin複製同一個文件。沒有更多的鏈接器錯誤,而是我得到一個錯誤,說應用程序啓動失敗:(仍然編譯和運行在釋放模式,雖然。

相關問題