我正在尝试为
Qt 5.15.16
手臂 - WinRT
构建 winrt-arm-msvc2019
。根据此文档:https://wiki.qt.io/WinRTBuild
来自文档:
无论您的目标是什么(PC、Surface、手机等),始终使用 “x86 本机工具命令提示符”。这是因为命令提示符 首先构建主机工具(qmake、moc、rcc 等),然后 交叉编译 Qt 库。不要打开 Windows Phone 命令 例如,提示,因为它将无法构建主机工具。
所以,我尝试了
x86 Native Tools Command Prompt for VS 2019
来构建:winrt-arm-msvc2019
配置命令:
configure.bat -top-level -debug-and-release -xplatform "winrt-arm-msvc2019" -confirm-license -mp -c+std c+17 -opensource -nomake examples -no-ltcg -skip qtwebengine -prefix "C:\Qt\5.15.16\winrt_armv7_msvc2019"
我遇到以下问题:
...
cl -Yuqmake_pch.h -FIqmake_pch.h -Fpqmake_pch.pch -c -Fo./ -Fdqmake.pdb -W2 -nologo -O2 /MP /wd4577 -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake\library -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake\generators -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake\generators\unix -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake\generators\win32 -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake\generators\mac -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase/src/3rdparty/tinycbor/src -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase/include -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase/include\QtCore -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase/include\QtCore\5.15.16 -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase/include\QtCore\5.15.16\QtCore -I..\src\corelib\global -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\mkspecs\win32-msvc -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -DQT_VERSION_STR=\"5.15.16\" -DQT_VERSION_MAJOR=5 -DQT_VERSION_MINOR=15 -DQT_VERSION_PATCH=16 -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL -DQT_NO_FOREACH -DUNICODE -D_ENABLE_EXTENDED_ALIGNED_STORAGE C:\QtBuild\qt-everywhere-src-5.15.16\qtbase\src\corelib\serialization\qjsonvalue.cpp
qjsonvalue.cpp
cl -c -Fo./ -Fdqmake.pdb -W2 -nologo -O2 /MP /wd4577 -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake\library -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake\generators -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake\generators\unix -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake\generators\win32 -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\qmake\generators\mac -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase/src/3rdparty/tinycbor/src -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase/include -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase/include\QtCore -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase/include\QtCore\5.15.16 -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase/include\QtCore\5.15.16\QtCore -I..\src\corelib\global -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\mkspecs\win32-msvc -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -DQT_VERSION_STR=\"5.15.16\" -DQT_VERSION_MAJOR=5 -DQT_VERSION_MINOR=15 -DQT_VERSION_PATCH=16 -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL -DQT_NO_FOREACH -DUNICODE -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DQT_BUILD_QMAKE_BOOTSTRAP C:\QtBuild\qt-everywhere-src-5.15.16\qtbase\src\corelib\global\qlibraryinfo.cpp
qlibraryinfo.cpp
link /OUT:..\bin\qmake.exe project.obj main.obj ioutils.obj proitems.obj qmakevfs.obj qmakeglobals.obj qmakeparser.obj qmakeevaluator.obj qmakebuiltins.obj makefile.obj unixmake.obj unixmake2.obj mingw_make.obj option.obj winmakefile.obj projectgenerator.obj property.obj meta.obj makefiledeps.obj metamakefile.obj xmloutput.obj msvc_nmake.obj msvc_vcproj.obj msvc_vcxproj.obj msvc_objectmodel.obj msbuild_objectmodel.obj registry.obj qbitarray.obj qbuffer.obj qcryptographichash.obj qfilesystementry.obj qfilesystemengine.obj qfilesystemengine_win.obj qfilesystemiterator_win.obj qfsfileengine.obj qfsfileengine_iterator.obj qarraydata.obj qbytearray.obj qbytearraylist.obj qvsnprintf.obj qbytearraymatcher.obj qcalendar.obj qdatetime.obj qdir.obj qdiriterator.obj qfiledevice.obj qfile.obj qtemporaryfile.obj qabstractfileengine.obj qfsfileengine_win.obj qsystemlibrary.obj qfileinfo.obj qendian.obj qglobal.obj qgregoriancalendar.obj qhash.obj qiodevice.obj qringbuffer.obj qdebug.obj qlist.obj qlocale.obj qlocale_tools.obj qlocale_win.obj qversionnumber.obj qmalloc.obj qmap.obj qoperatingsystemversion.obj qoperatingsystemversion_win.obj qregexp.obj qromancalendar.obj qutfcodec.obj qstring.obj qstringlist.obj qstringbuilder.obj qsystemerror.obj qtextstream.obj qdatastream.obj quuid.obj qrandom.obj qsettings.obj qvariant.obj qsettings_win.obj qmetatype.obj qxmlstream.obj qxmlutils.obj qnumeric.obj qlogging.obj qcborstreamwriter.obj qcborvalue.obj qjsoncbor.obj qjsondocument.obj qjsonparser.obj qjsonarray.obj qjsonobject.obj qjsonvalue.obj qlibraryinfo.obj qmake_pch.obj ole32.lib advapi32.lib shell32.lib netapi32.lib
Microsoft (R) Incremental Linker Version 14.29.30157.0
Copyright (C) Microsoft Corporation. All rights reserved.
Info: creating super cache file C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild\.qmake.super
Info: creating cache file C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild\.qmake.cache
Info: creating stash file C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild\.qmake.stash
This is the Qt Open Source Edition.
You have already accepted the terms of the Open Source license.
Running configuration tests...
Checking for valid makespec... ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken.
Check config.log for details.
C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild>
配置日志:
Command line: -debug-and-release -xplatform winrt-arm-msvc2019 -confirm-license -mp -c++std c++17 -opensource -nomake examples -no-ltcg -skip qtwebengine -prefix C:\Qt\5.15.16\winrt_armv7_msvc2019
executing config test verifyspec
+ cd /d C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild\config.tests\verifyspec && C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild\qtbase\bin\qmake.exe "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" "QMAKE_LFLAGS += /ENTRY:main" -early "CONFIG += cross_compile" C:/QtBuild/qt-everywhere-src-5.15.16/qtbase/config.tests/verifyspec
+ cd /d C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild\config.tests\verifyspec && set MAKEFLAGS=& jom
> jom 1.1.4 - empower your cores
> cl -c -nologo -FS -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -O2 -MD -W0 -GR -EHsc -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQ_BYTE_ORDER=Q_LITTLE_ENDIAN -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP -DWINAPI_PARTITION_PHONE_APP=1 -DARM -D__ARM__ -D__arm__ -DNDEBUG -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\config.tests\verifyspec -I. -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\mkspecs\winrt-arm-msvc2019 -Fo @C:\Users\cobra\AppData\Local\Temp\verifyspec.obj.34368.0.jom
> verifyspec.cpp
> link /NOLOGO /DYNAMICBASE /NXCOMPAT /NODEFAULTLIB:ole32.lib /APPCONTAINER /MACHINE:ARM /NODEFAULTLIB:kernel32.lib /ENTRY:main /INCREMENTAL:NO /SUBSYSTEM:WINDOWS /MANIFEST:NO /OUT:verifyspec.exe @C:\Users\cobra\AppData\Local\Temp\verifyspec.exe.34368.31.jom
> verifyspec.obj : fatal error LNK1112: module machine type 'x86' conflicts with target machine type 'ARM'
> jom: C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild\config.tests\verifyspec\Makefile [verifyspec.exe] Error 1112
有什么想法可以解决这个问题吗?
我从 PATH 环境变量中删除了
jom
,以使用 nmake
来获取正确的错误消息。我遇到以下问题:
Running configuration tests...
Checking for valid makespec...
+ cd /d C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild\config.tests\verifyspec && C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild\qtbase\bin\qmake.exe "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" "QMAKE_LFLAGS += /ENTRY:main" -early "CONFIG += cross_compile" C:/QtBuild/qt-everywhere-src-5.15.16/qtbase/config.tests/verifyspec
+ cd /d C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild\config.tests\verifyspec && set MAKEFLAGS=& nmake
> Microsoft (R) Program Maintenance Utility Version 14.29.30158.0
> Copyright (C) Microsoft Corporation. All rights reserved.
> cl -c -nologo -FS -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -O2 -MD -W0 -GR -EHsc -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQ_BYTE_ORDER=Q_LITTLE_ENDIAN -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP -DWINAPI_PARTITION_PHONE_APP=1 -DARM -D__ARM__ -D__arm__ -DNDEBUG -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\config.tests\verifyspec -I. -IC:\QtBuild\qt-everywhere-src-5.15.16\qtbase\mkspecs\winrt-arm-msvc2019 -Fo @C:\Users\cobra\AppData\Local\Temp\nm3D22.tmp
> verifyspec.cpp
> link /NOLOGO /DYNAMICBASE /NXCOMPAT /NODEFAULTLIB:ole32.lib /APPCONTAINER /MACHINE:ARM /NODEFAULTLIB:kernel32.lib /ENTRY:main /INCREMENTAL:NO /SUBSYSTEM:WINDOWS /MANIFEST:NO /OUT:verifyspec.exe @C:\Users\cobra\AppData\Local\Temp\nm3D71.tmp
> LINK : fatal error LNK1181: cannot open input file 'ucrt.lib'
> NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX86\ARM\link.EXE"' : return code '0x49d'
> Stop.
ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken.
C:\QtBuild\qt-everywhere-src-5.15.16\qtBuild>
问题在于 > LINK:致命错误 LNK1181:无法打开输入文件“ucrt.lib”。
我发现这个问题导致了最新的
Windows SDK - 10.0.26100.0
:https://discussions.unity.com/t/info-link-fatal-error-lnk1181-cannot-open-input-file-ucrt-lib- Hololens-2-build-issue/950584/3
所以,我使用了以下
Windows SDK: 10.0.22621.0
并运行:"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars32.bat" 10.0.22621.0
现在,它完成了配置,我成功为
Qt 5.15.16
架构构建了 winrt-arm-msvc2019
。此问题已解决。谢谢。