使用llvm 5.0.0目标x86_64-w64-windows-gnu构建wxwidgets 3.0.3时mediactrl_am.cpp出错

时间:2017-12-06 22:47:07

标签: wxwidgets

我最近使用mingw-w64 7.2.0编译了 wxWidgets 3.0.3 ,但由于异常处理存在一些问题,我现在尝试使用 llvm重新编译它们5.0.0 (使用 x86_64-w64-windows-gnu 目标,来自 mingw-w64 7.2.0,64位,seh,posix线程的标准库)没有那些问题。

我没有找到如何在Windows上使用Clang构建wxWidgets的当前稳定版本(3.0.3)的说明。所以我尝试了像

这样的命令
mingw32-make.exe -f makefile.gcc MONOLITHIC=1 SHARED=1 BUILD=debug CXXFLAGS=" -fexceptions -fasynchronous-unwind-tables -fnon-call-exceptions -std=gnu++11 -pthread " LDFLAGS=" -fexceptions -fasynchronous-unwind-tables -fnon_call_exceptions -pthread "  CC="clang -target x86_64-w64-windows-gnu" CXX="clang++ -target x86_64-w64-windows-gnu" COMPILER_PREFIX="clang"

在.. \ build \ msw子目录中构建一个可能的配置。

(使用mingw-w64我也使用了LDFLAGS=" -Wl,--allow-multiple-definition ",这里可能存在多个符号的问题。我还有pathched源代码,因为我遇到了wxPrintf的问题)

我遇到的第一个错误:

../../src/msw/mediactrl_am.cpp:2234:10: error: case value evaluates to
      4294966687, which cannot be narrowed to type 'DISPID' (aka 'long')
      [-Wc++11-narrowing]
    case 0xfffffd9f: // readystatechange in IActiveMovie2 and IMediaPlayer
         ^
1 error generated.

我在wxWidgets论坛上的帐户尚未激活,所以我在这里问。

可能有人知道如何修复此问题的正确方法吗?

1 个答案:

答案 0 :(得分:0)

对此特定问题的明显解决方法似乎是将此值替换为-609

但是我需要警告你,据我所知,到目前为止还没有人使用clang编译wxMSW(当然,即使clang可用于编译wxGTK和wxOSX),所以你可能会碰到其他,不那么琐碎,以后的问题。我还建议尝试编译最新的git master而不是3.0.3,因为clang build可能需要的任何非平凡的更改都不可能在stable 3.0分支中完成。