GUIツールキットとして有名なFLTKをMinGW環境でビルドしてみた。
MinGW環境はmingw-getでインストールできる4.5.0系のg++によるもの。
この環境ではauto-importの警告とかUnwind_Resumeの多重定義エラーが出たりする。
auto-importの警告とは以下のようなもの。
c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: warning: auto-importing has been activated without --enable-auto-import specified on the command line. This should work unless it involves constant data structures referencing symbols from auto-imported DLLs.
Unwind_Resumeのエラーは以下のようなもの。
Creating library file: ../lib/libfltk2_images.dll.ac:/mingw/bin/../lib/gcc/mingw32/4.5.0/libgcc_eh.a(unwind-dw2.o):(.text+0x28c8): multiple definition of `_Unwind_Resume'
それらに対処するには--enable-auto-importをリンカに渡してやるとかリンク時のライブラリ指定の除外をしてやれば良い。
具体的には-Wl,--enable-auto-importとか-Wl,--exclude-libs,libgcc_eh.aとかを指定するということ。
ref. http://forums.codeblocks.org/index.php?topic=10508.0
というわけで、トップレベルにあるmakeincludeに細工をしてやれば良い。
差分としては以下のように修正する。
--- makeinclude.orig 2010-10-28 23:07:15 +0900 +++ makeinclude 2010-10-28 23:36:25 +0900 @@ -65,7 +65,7 @@ RANLIB = ranlib # programs and definitions to make shared libraries: -DSOCOMMAND = $(CXX) -Wl,--out-implib,../lib/lib$(DSONAME).a -shared -DFL_SHARED -DFL_LIBRARY -DFL_IMAGES_LIBRARY -DFL_GLUT_LIBRARY -DFL_FORMS_LIBRARY -DFL_GL_LIBRARY -o +DSOCOMMAND = $(CXX) -Wl,--out-implib,../lib/lib$(DSONAME).a -Wl,--exclude-libs,libgcc_eh.a -shared -DFL_SHARED -DFL_LIBRARY -DFL_IMAGES_LIBRARY -DFL_GLUT_LIBRARY -DFL_FORMS_LIBRARY -DFL_GL_LIBRARY -o DSOLINK = DSOPREFIX = DSOSUFFIX = .dll @@ -77,8 +77,8 @@ ZLIBINC = # libraries to link with: -LDLIBS = -mwindows -Wl,--enable-runtime-pseudo-reloc -lpthread -lmsimg32 -lole32 -luuid -lcomctl32 -lwsock32 -lsupc++ -GLDLIBS = -mwindows -Wl,--enable-runtime-pseudo-reloc -lglu32 -lopengl32 -lpthread -lmsimg32 -lole32 -luuid -lcomctl32 -lwsock32 -lsupc++ +LDLIBS = -mwindows -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import -lpthread -lmsimg32 -lole32 -luuid -lcomctl32 -lwsock32 -lsupc++ +GLDLIBS = -mwindows -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import -lglu32 -lopengl32 -lpthread -lmsimg32 -lole32 -luuid -lcomctl32 -lwsock32 -lsupc++ LINKFLTK = -L../lib -lfltk2 LINKFLTKGL = -L../lib -lfltk2_gl -lfltk2 LINKFLTKFORMS = -L../lib -lfltk2_forms -lfltk2