1

cabal installwxHaskell (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

必要に応じて詳細を提供できます。

4

1 に答える 1

-1

まず第一に、wxWidgets は確かに MinGW で動作します。TDM バイナリのみが提供されているという事実は、誰かが後者を提供することを自発的に申し出たが、前者は提供しなかったことを意味します。しかし、MinGW の 3 つの一般的なバージョン (前述の 2 つと MinGW-w64) はすべて動作するため、ビルドに何か問題があるはずです...

ただし、それらはすべて機能しますが、確かに異なるコンパイラです。両方が同じ gcc バイナリを使用しているとはどういう意味ですか? MinGW または TDM のいずれかである必要がありますが、両方を同時に使用することはできません。

大きなファイルのサポートに使用するさまざまなフラグを構成が検出することも非常に疑わしいです。を見てくださいconfig.log。何かがうまくいかなかったに違いなく、その初期段階にいくつかのエラーがあるに違いありません。

于 2014-03-14T01:14:26.900 に答える