【问题标题】:Building wxWidgets with WXUNIV=1 fails使用 WXUNIV=1 构建 wxWidgets 失败
【发布时间】:2021-04-28 16:40:49
【问题描述】:

我正在尝试使用“WXUNIV=1”编译 wxWidgets,但它似乎不适用于任何 3.X.X 版本。第一个工作的版本是 2.9.5。遗憾的是,这个版本太旧了,无法替换我目前使用的版本(3.1.1)。

我用来编译的步骤是基于https://docs.wxwidgets.org/trunk/plat_msw_install.html

  1. 使用 VS 命令行将 CD 复制到“wxWidgets-3.1.5\build\msw”并运行“nmake /f makefile.vc BUILD=release SHARED=1 TARGET_CPU=X86 WXUNIV=1”。

这将给出以下错误:

D:\wxWidgets-3.1.5\include\wx/msw/chkconf.h(34): fatal error C1189: #error: "wxUSE_WINRT must be defined."
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.28.29333\bin\HostX86\x86\cl.EXE"' : return code '0x2'
Stop.
  1. 尝试取消定义 wxABORT_ON_CONFIG_ERROR(我知道不建议这样做,但值得一试)会导致链接错误。

知道是什么原因造成的吗?

编辑:我试过#define:

wxUSE_WINRT

wxUSE_TASKBARBUTTON

wxUSE_DBGHELP

a.k.a 导致错误的定义。这与取消定义 wxABORT_ON_CONFIG_ERROR 相同。我收到以下链接错误:

coredll_graphcmn.obj : error LNK2001: unresolved external symbol "public: static class wxGraphicsRenderer * __cdecl wxGraphicsRenderer::GetDefaultRenderer(void)" (?GetDefaultRenderer@wxGraphicsRenderer@@SAPAV1@XZ)
coredll_statbmpg.obj : error LNK2001: unresolved external symbol "public: static class wxGraphicsRenderer * __cdecl wxGraphicsRenderer::GetDefaultRenderer(void)" (?GetDefaultRenderer@wxGraphicsRenderer@@SAPAV1@XZ)
coredll_richtooltipg.obj : error LNK2001: unresolved external symbol "public: static class wxGraphicsRenderer * __cdecl wxGraphicsRenderer::GetDefaultRenderer(void)" (?GetDefaultRenderer@wxGraphicsRenderer@@SAPAV1@XZ)
coredll_dcgraph.obj : error LNK2001: unresolved external symbol "public: virtual struct HDC__ * __thiscall wxGCDC::AcquireHDC(void)" (?AcquireHDC@wxGCDC@@UAEPAUHDC__@@XZ)
coredll_dcgraph.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall wxGCDC::ReleaseHDC(struct HDC__ *)" (?ReleaseHDC@wxGCDC@@UAEXPAUHDC__@@@Z)
..\..\lib\vc_dll\wxmswuniv315u_core_vc_custom.dll : fatal error LNK1120: 3 unresolved externals
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.28.29333\bin\HostX86\x86\link.EXE"' : return code '0x460'

【问题讨论】:

  • 您想要在 Windows 上进行通用构建的原因是什么?您是否尝试遵循建议 - 定义 wxUSE_WINRT
  • 我正在尝试为 Windows 应用程序支持暗模式,而常见的 wxWidgets 构建似乎没有为某些控件提供选项。据我所知,通用构建提供了更大的灵活性。
  • @Igor 我尝试定义报告为未定义的内容。这会导致相同的链接错误。我在原始帖子中添加了一个编辑。
  • 我明白了。问题是没有构建 Windows 上的 3.x 版本通用端口。因此没有经过测试。所以你会发现每一个问题——你将独自一人。最近在 ML 中有一个关于 dark mode 的讨论——你看到了吗?如果没有 - 我建议在 ML 存档中找到该线程。

标签: c++ wxwidgets


【解决方案1】:

wxUniv 端口还没有准备好用于生产,除非在非常有限的情况下,所以如果你要使用它,尤其是使用 X11 后端以外的东西,你需要准备好自己动手,特别是,修复其中的错误。

这个应该很容易修复,只是缺少了#if(WinRT 和 debughlp 甚至可以与 wxUniv 一起使用,即它们依赖于平台而不是使用的 UI 端口,而任务栏按钮应该在wxUniv,因为它没有在那里实现),但这只是一个开始,因为你以后肯定会遇到更多问题。如果你有动力去开发它们,请务必这样做,但我只是想警告你,你不应该期望这个端口与 3 个主要端口(MSW/GTK/Mac)具有相同的质量甚至是 wxQt。

【讨论】:

    猜你喜欢
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多