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

时间:2013-10-20 10:54:50

标签: c++ gcc g++ wxwidgets

我一直在尝试使用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_mswudll\coredll_treectrl.o' failed
mingw32-make: *** [gcc_mswudll\coredll_treectrl.o] Error 1

任何人都可以提供帮助,我已经尝试使用谷歌搜索,但结果很少(是的,我确实阅读了它们!)。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

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