动态链接库libstdc++-6.dll中找不到过程入口点_gxx_personality_v0的错误。

6
昨天我决定下载、安装并尝试使用 Allegro 5。我还下载了带有MinGW编译器的 Code::Blocks 12.11。我配置了一切并正确地安装了一切(至少我是这么认为的),然后尝试运行一个示例代码,以查看它是否能正常工作:
#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;
}

当我尝试编译和运行程序时,出现一个错误消息框,显示“在动态链接库libstdc++-6.dll中找不到过程入口点_gxx_personality_v0。”我在网上搜索了约一个小时,试图找到解决这个问题的方法,就像我对大多数事情做的那样,但是我一无所获。我想知道是否有人对此问题有任何修复的想法,如果有,请尽快让我知道!提前感谢您!


gcc -v 会给你什么信息?它是否与你下载的 Allegro 版本匹配? - Matthew
可能是重复的问题:找不到过程入口点__gxx_personality_v0 - M.M
2个回答

12

__gxx_personality_v0用于C++库的异常处理。MinGW可以在x86上支持几种不同的异常模型:sjlj (setjmp/longjmp)或DWARF (DW2)。据我所知,使用哪个模型是编译进编译器的-不能通过命令行选项选择。

sjlj异常模型将链接到__gxx_personality_sj0,DWARF模型链接到__gxx_personality_v0。看起来你的编译器正在构建dw2异常模型,但在运行时它发现一个使用sjlj模型构建的libstdc++-6.dll。请检查你的系统中是否有多个版本的libstdc++-6.dll,并尝试将另一个复制到与程序相同的目录中以解决问题。

你可以使用nm libstdc++-6.dll | grep personality查看DLL使用的异常“personality”。


谢谢回复!我搜索了整个电脑,除了MinGW bin文件夹中的那一个之外,找不到任何其他同名的.dll文件。我尝试将其添加到项目文件夹中并编译和运行,但仍然返回相同的错误:( - TobyFromMarketing
运行 nm libstdc++-6.dll | grep personality 会输出什么? - Michael Burr
啊 - 这个程序是否依赖于预先构建的DLL(即未在您的系统上编译)?如果是这样,可能您的编译器是sjlj,并且其中一个或多个DLL是使用dw2异常处理构建的。您可能需要自己构建所有库,或获取替代库以匹配您的编译器的异常处理方式(或者可能切换到使用dw2异常处理的MinGW编译器)。 - Michael Burr
我正在运行 nm libstdc++-6.dll,它说没有这个文件,这是什么意思?我已经把文件放在 windows/system32 目录下了。 - Irvan Hilmi

1
我也遇到了这个问题。查找了一些资料,有人提到要注意自己是否处于Debug或Release模式。这适用于Code::Blocks。我发现自己处于Debug模式。我把它改成了Release模式,程序就编译并运行了起来。
但是我对此感到困惑……在我看来,它应该在两种模式下都可以正常工作,那么如何修复它呢?我没有答案。也许有人会在评论中提供解决方案。与此同时,请在Release模式下编译和运行。
我刚刚进行了一些疯狂的尝试,将MinGW/bin中的libstdc++6.dll移除并放入另一个文件夹。然后我从Gimp/bin中复制了同样的文件。不再是链接器错误,而是出现了一个错误,说应用程序无法启动:( 虽然仍然可以在Release模式下编译和运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接