【问题标题】:The procedure entry point _gxx_personality_v0 could not be located in the dynamic link library libstdc++-6.dll Error无法在动态链接库 libstdc++-6.dll 中定位程序入口点 _gxx_personality_v0 错误
【发布时间】:2013-06-28 22:37:50
【问题描述】:

昨天我决定下载、安装并尝试使用 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。”我在网上搜索了大约一个小时,试图找到解决这个问题的方法,就像我对大多数事情所做的那样,但我空手而归。我想知道是否有人对解决此问题有任何想法,如果有,请尽快告诉我!提前致谢!

【问题讨论】:

标签: c++ mingw codeblocks windows-vista allegro5


【解决方案1】:

__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 文件夹中的那个之外,找不到该名称的任何其他 .dll。我尝试将其添加到项目文件夹中并编译并运行,但它仍然返回相同的错误:(
  • 运行nm libstdc++-6.dll | grep personality 说明了什么?
  • 啊 - 这个程序是否依赖于预先构建的 DLL(即,未在您的系统上编译)?如果是这样,那么您的编译器可能是 sjlj,并且其中一个或多个 DLL 是在预期 dw2 异常处理的情况下构建的。您可能需要自己构建所有库,或者获取替代库构建以匹配您的编译器的异常处理(或者可能将 MinGW 编译器切换到使用 dw2 异常处理的编译器)。
  • 我正在运行nm libstdc++-6.dll 它说没有这样的文件,这应该是什么意思?我已经把文件放在windows/system32
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2018-08-13
    • 2013-07-24
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多