使用MinGW构建Qt项目以使用WinRT API

8
我想在使用Qt 5.9.2 MinGW 32位创建的应用程序中,使用WinRT API提供的库(例如这些)。我使用的操作系统是Windows 10。

现在,我已经设置了如下所示的kit。

MinGW Kit Setup

然后,在.pro文件中,我添加了以下内容:

CONFIG += c++1z

SOURCES += main.cpp

 ### Windows 10 SDK

 win32:CONFIG(release, debug|release): LIBS += -L$$PWD/'../../../../Program Files (x86)/Windows Kits/10/Lib/10.0.16299.0/um/x86/' -lWindowsApp
 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/'../../../../Program Files (x86)/Windows Kits/10/Lib/10.0.16299.0/um/x86/' -lWindowsApp

 INCLUDEPATH += $$PWD/'../../../../Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/shared'
 DEPENDPATH += $$PWD/'../../../../Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/shared'
 INCLUDEPATH += $$PWD/'../../../../Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/um'
 DEPENDPATH += $$PWD/'../../../../Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/um'
 INCLUDEPATH += $$PWD/'../../../../Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/ucrt'
 DEPENDPATH += $$PWD/'../../../../Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/ucrt'
 INCLUDEPATH += $$PWD/'../../../../Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.12.25827/include'
 DEPENDPATH += $$PWD/'../../../../Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.12.25827/include'
 INCLUDEPATH += $$PWD/../ne-patient-app-libraries/cppwinrt/10.0.16299.0/
 DEPENDPATH += $$PWD/../ne-patient-app-libraries/cppwinrt/10.0.16299.0/

我从GitHub仓库获取了cppwinrt,并从Windows Dev Center下载了Windows 10 SDK。

我只是在main.cpp中添加了一些代码来测试正确的编译:

#include <QCoreApplication>
#include <winrt/Windows.Devices.WiFi.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    WiFiAdapter wiFiAdapter;

    return a.exec();
}

在运行qmakebuild之后,我遇到了以下错误:

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_stdio_config.h:31: error: #error Unsupported architecture #error Unsupported architecture ^

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.12.25827\include\new:23: error: #error Unsupported architecture #error Unsupported architecture ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um\winnt.h:1008: error: #error Must define a target architecture. #error Must define a target architecture. ^

... 还有其他文件的错误:corecrt_stdio_config.hwinnt.hoaidl.hDirectXMath.hvcruntime.hyvals.h

这是编译器运行的详细构建命令:

g++ -c -fno-keep-inline-dllexport -g -std=gnu++1z -Wextra -Wall -W -fexceptions -mthreads -DUNICODE -D_UNICODE -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_CORE_LIB -I../uwp-test -I. -I"../../../../Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/shared" -I"../../../../Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/um" -I"../../../../Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/ucrt" -I"../../../../Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.12.25827/include" -I../ne-patient-app-libraries/cppwinrt/10.0.16299.0 -I../../../../Qt/5.9.2/mingw53_32/include -I../../../../Qt/5.9.2/mingw53_32/include/QtCore -Idebug -I../../../../Qt/5.9.2/mingw53_32/mkspecs/win32-g++  -o debug/main.o ../uwp-test/main.cpp

我有什么遗漏吗?有什么方法可以解决这个问题吗?谢谢!


我不确定这是否可能。你可能需要使用msvc。 - dtech
1
据我所知,只有MSVC得到官方支持,Clang作为次要编译器以确保标准一致性。如果您无法使用MSVC,则最好选择切换到Clang。 - IInspectable
如果你需要使用GNU功能,可能需要使用-std=c++17或者-std=gnu++17。C++/WinRT要求C++17。Visual Studio还使用了/await选项,这可以为协程启用一些实验性和技术规范编译器功能,但我不确定这是否也是必须的。请参见 https://gcc.gnu.org/projects/cxx-status.html#cxx1z。 - Richard Chambers
1个回答

0

要使用MSVC解决此问题,解决方案是#include <windows.h>。虽然mingw-64的支持可能不完整,但这也应该适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接