程序入口点_gxx_personality_v0无法位于动态链接库libstdc ++中 - 6.dll错误

时间:2013-07-01 17:58:39

标签: mingw windows-vista codeblocks allegro5

昨天我决定下载,安装并尝试使用Allegro 5.我还下载了Code :: Blocks 12.11 w / MinGW编译器。我设置了所有内容并正确安装了所有内容(或者我认为),并尝试运行示例代码以查看它是否可行:

#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中。”我在网上搜索了大约一个小时试图找到解决这个问题的方法,就像我对大多数事情一样,但我空手而归。我想知道是否有人对此问题的任何修复有任何想法,如果是这样,请尽快告诉我!提前谢谢!

2 个答案:

答案 0 :(得分:10)

__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正在使用的“个性”异常。

答案 1 :(得分:1)

我也碰到了这个。做了一些搜索,有人提到要注意你是否处于调试或发布模式。这特别适用于Code :: Blocks。我发现我处于调试模式。我将其更改为发布模式,我的程序已编译并运行。

我对此感到困扰......在我看来它应该在两种模式下工作,所以如何修复它以便它呢?那里我没有回答。也许有人会对解决方案发表评论。与此同时,在发布模式下编译并运行,而不是在调试模式下运行。

我刚做了一个疯狂的科学,从MinGW / bin中删除了libstdc ++ 6.dll并将其放在另一个文件夹中。然后我从Gimp / bin复制了同一个文件。没有更多链接器错误,而是我收到一个错误,指出应用程序无法启动:(仍然编译并在发布模式下运行。