静态链接SFML库时MinGW中的问题

时间:2011-03-13 20:16:51

标签: c++ sfml

我有一个在Linux下编译没有错误的程序,但是当我使用MinGW为Windows编译它时它无法运行,因为它说它需要一些DLL旁边的它。所以我决定静态链接它,但它会输出一些错误:

/usr/i586-mingw32msvc/lib/libsfml-window-s.a(WindowImplWin32.o):WindowImplWin32.cpp:(.text+0x146e): undefined reference to `__Unwind_Resume'
/usr/i586-mingw32msvc/lib/libsfml-window-s.a(WindowImplWin32.o):WindowImplWin32.cpp:(.text+0x17d0): more undefined references to `__Unwind_Resume' follow
/usr/i586-mingw32msvc/lib/libsfml-window-s.a(WindowImplWin32.o):WindowImplWin32.cpp:(.eh_frame+0x12): undefined reference to `___gxx_personality_v0'
/usr/i586-mingw32msvc/lib/libsfml-window-s.a(Joystick.o):Joystick.cpp:(.eh_frame+0x11): undefined reference to `___gxx_personality_v0'
collect2: ld returned 1 exit status

它似乎有一些外部依赖。那些是什么,我如何链接它们?

修改

以下是我在命令行中输入的内容:

  

i586-mingw32msvc-g ++“./ main.cpp”-o“./ win32.exe”/ usr / i586-mingw32msvc / lib / libsfml-graphics-sa / usr / i586-mingw32msvc / lib / libsfml-window -sa /usr/i586-mingw32msvc/lib/libm.a /usr/i586-mingw32msvc/lib/libmsvcr90.a

将不胜感激。

2 个答案:

答案 0 :(得分:1)

我最近也遇到过这个问题。

SFML是使用DW2异常处理编译的,但默认的MinGW交叉编译器(在Debain和Ubuntu repos中)使用SJLJ,并且它们彼此不兼容。我不得不使用DW2异常处理构建自己的交叉编译器,并且完美无瑕。或者,您可以使用现有的SJLJ编译器构建SFML,因此SFML也将是SJLJ。

我决定构建一个DW2编译器,因为它是更现代的方法,也是一个很好的练习。

答案 1 :(得分:0)

确保使用g ++而不是gcc,应该修复它。从头开始(在重建之前清理所有内容)。另一种选择可能是here中描述的内容,假设您已经使用了g ++并且仍然可以使用它。