使用 GCC-4.8.1 在 MinGW 上编译 wxWidgets-2.8.12 时出错

Error while compiling wxWidgets-2.8.12 on MinGW with GCC-4.8.1

本文关键字:wxWidgets-2 编译 出错 MinGW GCC-4 使用      更新时间:2023-10-16

我一直在尝试用MinGW的GCC(版本4.8.1)编译wxWidgets,并且一直收到来自g ++的错误,说:

../../src/msw/treectrl.cpp: In member function 'virtual bool wxTreeCtrl::MSWOnNo
tify(int, WXLPARAM, WXLPARAM*)':
../../src/msw/treectrl.cpp:2581:17: error: 'NMTVDISPINFOWW' was not declared in
this scope
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                 ^
../../src/msw/treectrl.cpp:2581:30: error: 'info' was not declared in this scope
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                              ^
../../src/msw/treectrl.cpp:2581:51: error: expected primary-expression before ')
' token
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                                               ^
../../src/msw/treectrl.cpp:2581:52: error: expected ';' before 'lParam'
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                                                ^
In file included from ....include/wx/msw/gccpriv.h:22:0,
                 from ....include/wx/platform.h:577,
                 from ....include/wx/defs.h:21,
                 from ....include/wx/wxprec.h:13,
                 from ../../src/msw/treectrl.cpp:21:
../../src/msw/treectrl.cpp:2615:17: error: 'NMTVDISPINFOWW' was not declared in
this scope
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                 ^
../../src/msw/treectrl.cpp:2615:30: error: 'info' was not declared in this scope
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                              ^
../../src/msw/treectrl.cpp:2615:51: error: expected primary-expression before ')
' token
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                                               ^
../../src/msw/treectrl.cpp:2615:52: error: expected ';' before 'lParam'
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                                                ^
In file included from ....include/wx/msw/gccpriv.h:22:0,
                 from ....include/wx/platform.h:577,
                 from ....include/wx/defs.h:21,
                 from ....include/wx/wxprec.h:13,
                 from ../../src/msw/treectrl.cpp:21:
../../src/msw/treectrl.cpp:2659:17: error: 'NMTVDISPINFOWW' was not declared in
this scope
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                 ^
../../src/msw/treectrl.cpp:2659:30: error: 'info' was not declared in this scope
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                              ^
../../src/msw/treectrl.cpp:2659:51: error: expected primary-expression before ')
' token
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                                                   ^
../../src/msw/treectrl.cpp:2659:52: error: expected ';' before 'lParam'
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                                                    ^
In file included from ....include/wx/msw/gccpriv.h:22:0,
                 from ....include/wx/platform.h:577,
                 from ....include/wx/defs.h:21,
                 from ....include/wx/wxprec.h:13,
                 from ../../src/msw/treectrl.cpp:21:
../../src/msw/treectrl.cpp:3084:17: error: 'NMTVDISPINFOWW' was not declared in
this scope
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                 ^
../../src/msw/treectrl.cpp:3084:30: error: 'info' was not declared in this scope
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                                  ^
../../src/msw/treectrl.cpp:3084:51: error: expected primary-expression before ')
' token
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                                                   ^
../../src/msw/treectrl.cpp:3084:52: error: expected ';' before 'lParam'
                 TV_DISPINFO *info = (TV_DISPINFO *)lParam;
                                                    ^
makefile.gcc:9310: recipe for target 'gcc_mswudllcoredll_treectrl.o' failed
mingw32-make: *** [gcc_mswudllcoredll_treectrl.o] Error 1

谁能帮忙,我试过谷歌搜索,但结果很少(是的,我确实读过它们!

您的标头中似乎有一个错误,NMTVDISPINFOWW(带有 2 个尾随的 Ws)不存在,也不应该出现在任何地方。您可以尝试修复标头本身中的拼写错误,或下载已知有效的Windows的gcc发行版(例如MinGW-w64或TDM-GCC)。

此处记录了类似的问题: http://mingw.5.n7.nabble.com/win32api-version-4-td32288.html
无论如何,我强烈建议使用MinGW-w64或TDM-GCC的sjlj版本。
"标准"MinGW 发行版使用 dw2 异常处理,当异常通过事件循环传递时会导致一些问题。