mingw32(の gcc)と C++ と例外
「mingw32 の C++ で例外がちゃんと捕まえられない、と思ったら(gcc じゃなくて)g++ 使ったらいけたみたい」的な話が個人的に気になったので、自分でもすこし確かめてみました。
コンパイラは mingw 公式の gcc 4.5.2 でホスト OS は WinXP です。
すごく大雑把にいうと、gcc 経由でリンクするとデフォルトで libgcc がスタティックリンクされ、g++ だと DLL 版の libgcc が使われるようです。libstdc++ の DLL は libgcc の DLL をインポートしているので、exe 側で libgcc を静的に埋め込まれているといろいろと辻褄が合わなくなる…ということなんでしょうか?
で、ためしに -shared-libgcc を明示的に指定すると、gcc 経由でリンクしても例外がちゃんと捕まるようになりました。
ついでに -static 指定して全部(libstdc++ も)スタティックリンクしてみましたが、当然ながらうまく動作しました。