Subscribed unsubscribe Subscribe Subscribe

FLTK 2.0.x r7725をビルドするときのエラーへの対処

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