昨天我决定下载,安装并尝试使用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中。”我在网上搜索了大约一个小时试图找到解决这个问题的方法,就像我对大多数事情一样,但我空手而归。我想知道是否有人对此问题的任何修复有任何想法,如果是这样,请尽快告诉我!提前谢谢!
答案 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复制了同一个文件。没有更多链接器错误,而是我收到一个错误,指出应用程序无法启动:(仍然编译并在发布模式下运行。