cabal install
wxHaskell (wxWidgets 3.0 に対する Haskell プラットフォーム 2013.2) のコンポーネントを試しています。mingw.org の 32 ビット mingw で git バージョンをコンパイルできました。しかし、結局、インストールされた wx は正しく機能できず、最小限の例を実行すると、wxc.dll でランタイム例外が発生します。wxWidgets の人々は TDM-GCC コンパイル済みバイナリの形式でバイナリを提供しているため、TDM-GCC 4.8.1 64 ビットで同じものをコンパイルしようとしました。
しかし、すぐに TDM-GCC でコンパイル エラーが発生しました。
エラー: 'strnlen' はこのスコープで宣言されていません
私が驚いたのは、mingw32 と TDM-gcc の両方が Haskell Platform の同じ外部 gcc を使用しているにもかかわらずc:\HaskellPlatform\2013.2.0.0\mingw\bin\gcc.exe
、一方がエラーを出し、もう一方が正常にコンパイルされることです。
問題を引き起こしている最初のファイルはsrc\cpp\eljaccelerator.cpp
. mingw32 で問題なくコンパイルできます:
...
c:\HaskellPlatform\2013.2.0.0\mingw\bin\gcc.exe -Wl,--hash-size=31 -Wl,--reduce-
memory-overheads -Isrc/include -IC:/MinGW/msys/1.0/local/include/wx-3.0 -IC:/Min
GW/msys/1.0/local/lib/wx/include/msw-unicode-3.0 -D__WXMSW__ -DWXUSINGDLL -D_LAR
GEFILE_SOURCE=unknown -DwxcREFUSE_MEDIACTRL -DBUILD_DLL -c src\cpp\eljaccelerato
r.cpp -o dist\build\src/cpp/eljaccelerator.o
ただし、TDM-gcc ではエラーが発生します。
Building wxc
c:\HaskellPlatform\2013.2.0.0\mingw\bin\gcc.exe -Wl,--hash-size=31 -Wl,--reduce-
memory-overheads -Isrc/include -IC:/mingw/msys/1.0/local/include/wx-3.0 -IC:/min
gw/msys/1.0/local/lib/wx/include/msw-unicode-3.0 -D__WXMSW__ -DWXUSINGDLL -D_FIL
E_OFFSET_BITS=64 -DwxcREFUSE_MEDIACTRL -DBUILD_DLL -c src\cpp\eljaccelerator.cpp
-o dist\build\src/cpp/eljaccelerator.o
In file included from C:/mingw/msys/1.0/local/include/wx-3.0/wx/crt.h:19:0,
from C:/mingw/msys/1.0/local/include/wx-3.0/wx/string.h:4305,
from C:/mingw/msys/1.0/local/include/wx-3.0/wx/memory.h:15,
from C:/mingw/msys/1.0/local/include/wx-3.0/wx/object.h:19,
from C:/mingw/msys/1.0/local/include/wx-3.0/wx/wx.h:15,
from src/include/wrapper.h:20,
from src\cpp\eljaccelerator.cpp:1:
C:/mingw/msys/1.0/local/include/wx-3.0/wx/wxcrt.h: In function 'size_t wxStrnlen
(const char*, size_t)':
C:/mingw/msys/1.0/local/include/wx-3.0/wx/wxcrt.h:173:92: error: 'strnlen' was n
ot declared in this scope
C:/mingw/msys/1.0/local/include/wx-3.0/wx/wxcrt.h: In function 'size_t wxStrnlen
(const wchar_t*, size_t)':
C:/mingw/msys/1.0/local/include/wx-3.0/wx/wxcrt.h:187:95: error: 'wcsnlen' was n
ot declared in this scope
Failed to install wxc-0.90.1.1
似たような経験をした人がいないか気になりました。何が問題で、TDM-GCC のコンパイルを修正する方法はありますか? に追加#include <cstring>
してみましたwxcrt.h
が、何も変わりません。
参考までに、ソースから wxWidgets 3.0.0 をそれぞれ mingw および tdm-gcc バージョンでコンパイルしました。
./configure --enable-stl && make && make install
必要に応じて詳細を提供できます。