wxHaskell の再インストール(ld.exe: out of memory allocating 28119168 bytes)

Windows Vista の再インストールに伴いHaskellPlatform 2011.2.0.1をインストールしました。「wxHaskell をインストールする」と同じ手順でインストールしようとしたところトラブルがありましたので、メモしておきます。

> cd wxMSW-2.8.12/build/msw
> mingw32-make -f makefile.gcc BUILD=release MONOLITHIC=1 SHARED=1 UNICODE=1

c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../..
/mingw32/bin/ld.exe: out of memory allocating 28119168 bytes
collect2: ld returned 1 exit status
mingw32-make: *** [..\..\lib\gcc_dll\wxmsw28_gcc_custom.dll] Error 1

MONOLITHIC=0 にすればコンパイルは通りますが、次の段階でエラー・・・。

検索すると LD Memory Exhausted with MinGW's new GCC 4.5という記事を見つけました。TDM-GCC ならコンパイルできそうです。

  • TDM-GCCについて調べてみます。

TDM版GCC-4に関してによるとTDM版のGCCには次の特徴があるそうです。

・より最新のGCC-4系バイナリが用意されている。
・MinGW環境向けにビルドされている。
・バグが独自に修正されていることがある。
・pthreadやiconv等がサポートされている。

TDM-GCCをインストールしてwxWidgetsコンパイルしてみます。

  • TDM-GCCのtdm-gcc-4.5.2.exeをダウンロードしてインストールすると(標準ではC:\MinGW32へ)wxMSW-2.8.12のコンパイルに成功しました。
  • cabal install wx で wxHaskell のインストールに成功。
  • しかし、サンプルをコンパイルし、実行するとエラー。
hello.exe - エントリ ポイントが見つかりません
---------------------------
プロシージャ エントリ ポイント __gxx_personality_v0 がダイナミック リンク ライブラ
リ libstdc++-6.dll から見つかりませんでした。
---------------------------

GHC が使用している mingw のlibstdc++-6.dllとTDM-GCCのlibstdc++-6.dll微妙に違うようです。

  • GHCの使用するmingwをTDM-GCCに変更してみます。
    • C:\HaskellPlatform\2011.2.0.1\mingwをリネーム
    • C:\MinGW32のTDM-GCCをC:\HaskellPlatform\2011.2.0.1\mingwへがっさりコピー。
cabal update
cabal install wxdirect --reinstall
cabal install wxcore   --reinstall
cabal install wx       --reinstall

サンプルをコンパイルすると正常に動作しました。