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

The procedure entry point _gxx_personality_v0 could not be located in the dynamic link library libstdc++-6.dll Error

本文关键字:gxx personality 错误 v0 入口 过程 libstdc++-6 动态链接库 dll 找不到      更新时间:2023-10-16

昨天我决定下载、安装并尝试使用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;
}

当我试图编译和运行程序时,会出现一个错误消息框,上面写着"在动态链接库libstdc++-6.dll中找不到过程入口点_gxx_personality_v0。"。我想知道是否有人对解决这个问题有任何想法,如果有,请尽快告诉我!提前感谢!

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

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

不过我对此感到不安。。。在我看来,它应该在两种模式下都能工作,那么我该如何修复它呢?我没有答案。也许有人会对解决方案发表评论。同时,在发布模式而不是调试模式下编译和运行。

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

相关文章:
  • 没有找到相关文章