【问题标题】:Error while compiling wxWidgets-2.8.12 on MinGW with GCC-4.8.1使用 GCC-4.8.1 在 MinGW 上编译 wxWidgets-2.8.12 时出错
【发布时间】:2013-10-28 21:12:06
【问题描述】:

我一直在尝试使用 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

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

【问题讨论】:

    标签: c++ gcc g++ wxwidgets


    【解决方案1】:

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

    【讨论】:

    • 谢谢!工作得很好!我现在已经成功编译 wxWidgets!
    • 我应该下载哪个 mingw64,因为似乎最新的 8.1.0 自动中断 wxwidgets 编译并且 7.3.0 也无法正常工作
    • 7.3 绝对有效,我相信 8.1 也是如此。由于编译器错误,(最近的)9.1 存在问题,但它已在最新源中修复。如果您遇到任何问题,请尝试以常规方式报告。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-06-30
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多