简体   繁体   中英

How to build Qt 6.2.2 from source on Windows 10

I've been trying to build Qt 6.2.2 from source. I downloaded the sources package from the online installer but it fails each time, each time with a different error. I've tried a variety of configurations such as:

configure.bat -static -release -platform win32-msvc -opensource -confirm-license -prefix "C:\Qt\6.2.2\Static" -make libs -make tools -nomake examples -nomake tests

configure.bat -static -release -platform win32-msvc -opensource -confirm-license -prefix "C:\Qt\6.2.2\Static" -make libs -make tools -nomake examples -nomake tests -no-icu -no-opengl -no-openssl -skip qtwayland -skip qtquick3d -skip qtquickcontrols2 -skip qtquicktimeline -skip qtshadertools -skip qtdeclarative -skip qtdoc -skip qttranslations -skip qt3d -skip qt5compat -skip qtcharts -skip qtcoap -skip qtdatavis3d -skip qtlottie -skip qtmqtt -skip qtopcua -skip qtscxml -skip qtvirtualkeyboard -skip qtmultimedia -skip qtwebengine -skip qtwebview

configure.bat -static -release -platform win32-msvc -opensource -confirm-license -prefix "C:\Qt\6.2.2\Static" -no-openssl -make libs -make tools -nomake examples -nomake tests

I've tried using x86_x64 Cross Tools Command Prompt for VS 2017, x86_x64 Cross Tools Command Prompt for VS 2019, and x64 Native Tools Command Prompt for VS 2019

Here is one of the errors I've gotten using all config options then cmake --build.

[1424/8836] Building CXX object 
qtbase\src\network\CMakeFiles\Network.dir\Network_autogen\mocs_compilation.cpp.obj
FAILED: 
qtbase/src/network/CMakeFiles/Network.dir/Network_autogen/mocs_compilation.cpp.obj
C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1424~1.283\bin\Hostx86\x64\cl.exe  
/nologo /TP -DQT_ASCII_CAST_WARNINGS -DQT_BUILDING_QT -DQT_BUILD_NETWORK_LIB - 
DQT_CORE_LIB -DQT_DEPRECATED_WARNINGS -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 - 
DQT_DISABLE_DEPRECATED_BEFORE=0x040800 -DQT_MOC_COMPAT -DQT_NO_CAST_TO_ASCII - 
DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_NO_FOREACH - 
DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_USING_NAMESPACE - 
DQT_USE_QSTRINGBUILDER -DQT_USE_SYSTEM_PROXIES -DUNICODE -DWIN32 -DWIN64 - 
D_CRT_SECURE_NO_WARNINGS -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE - 
D_USE_MATH_DEFINES -D_WIN64 - 
IC:\Qt\6.2.2\Src\qtbase\src\network\Network_autogen\include - 
IC:\Qt\6.2.2\Src\qtbase\include -IC:\Qt\6.2.2\Src\qtbase\include\QtNetwork - 
IC:\Qt\6.2.2\Src\qtbase\src\network -IC:\Qt\6.2.2\Src\qtbase\src\network\kernel - 
IC:\Qt\6.2.2\Src\qtbase\include\QtNetwork\6.2.2 - 
IC:\Qt\6.2.2\Src\qtbase\include\QtNetwork\6.2.2\QtNetwork - 
IC:\Qt\6.2.2\Src\qtbase\src\network\..\3rdparty\zlib\src - 
IC:\Qt\6.2.2\Src\qtbase\include\QtCore -IC:\Qt\6.2.2\Src\qtbase\mkspecs\win32-msvc - 
IC:\Qt\6.2.2\Src\qtbase\src\corelib -IC:\Qt\6.2.2\Src\qtbase\include\QtCore\6.2.2 - 
IC:\Qt\6.2.2\Src\qtbase\include\QtCore\6.2.2\QtCore -IC:\Strawberry\c\include /DWIN32 
/D_WINDOWS /DNDEBUG -O2 -MD /W3 /wd4530 /wd4577 -Zc:__cplusplus -permissive- -utf-8 - 
FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding  
-Zc:externConstexpr -Zc:wchar_t -guard:cf -std:c++17 
/YuC:/Qt/6.2.2/Src/qtbase/src/network/CMakeFiles/Network.dir/cmake_pch.hxx 
/FpC:/Qt/6.2.2/Src/qtbase/src/network/CMakeFiles/Network.dir/./cmake_pch.cxx.pch 
/FIC:/Qt/6.2.2/Src/qtbase/src/network/CMakeFiles/Network.dir/cmake_pch.hxx 
/showIncludes 
/Foqtbase\src\network\CMakeFiles\Network.dir\Network_autogen\mocs_compilation.cpp.obj 
/Fdqtbase\lib\Qt6Network.pdb /FS -c 
C:\Qt\6.2.2\Src\qtbase\src\network\Network_autogen\mocs_compilation.cpp
C:\Program Files (x86)\Microsoft Visual 
Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\memory(1764): error C2027: 
use of undefined type 'QSslCipherPrivate'
C:\Qt\6.2.2\Src\qtbase\include\QtNetwork\../../src/network/ssl/qsslcipher.h(56): 
note: see declaration of 'QSslCipherPrivate'
C:\Program Files (x86)\Microsoft Visual 
Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\memory(1763): note: while 
compiling class template member function 'void 
std::default_delete<QSslCipherPrivate>::operator ()(_Ty *) noexcept const'
    with
    [
        _Ty=QSslCipherPrivate
    ]
C:\Program Files (x86)\Microsoft Visual 
Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\memory(1873): note: see 
reference to function template instantiation 'void 
std::default_delete<QSslCipherPrivate>::operator ()(_Ty *) noexcept const' being 
compiled
    with
    [
        _Ty=QSslCipherPrivate
    ]
C:\Program Files (x86)\Microsoft Visual 
Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\memory(1802): note: see 
reference to class template instantiation 'std::default_delete<QSslCipherPrivate>' 
being compiled
C:\Qt\6.2.2\Src\qtbase\include\QtNetwork\../../src/network/ssl/qsslcipher.h(87): 
note: see reference to class template instantiation 
'std::unique_ptr<QSslCipherPrivate,std::default_delete<QSslCipherPrivate>>' being 
compiled
C:\Qt\6.2.2\Src\qtbase\include\QtCore\../../src/corelib/kernel/qmetatype.h(2168): 
note: see reference to class template instantiation 'std::array<char,38>' being 
compiled
C:\Qt\6.2.2\Src\qtbase\src\network\access\qnetworkaccesscache_p.h(127): note: see 
reference to function template instantiation 'std::array<char,38> 
QtPrivate::typenameHelper<QNetworkAccessCache::CacheableObject*>(void)' being 
compiled
C:\Qt\6.2.2\Src\qtbase\include\QtCore\../../src/corelib/kernel/qmetatype.h(2168): 
note: see reference to class template instantiation 'std::array<char,28>' being 
compiled
C:\Qt\6.2.2\Src\qtbase\include\QtNetwork\../../src/network/access/
qnetworkreply.h(197): 
note: see reference to function template instantiation 'std::array<char,28> 
QtPrivate::typenameHelper<QNetworkReply::NetworkError>(void)' being compiled
C:\Qt\6.2.2\Src\qtbase\include\QtCore\../../src/corelib/kernel/qmetatype.h(2168): 
note: 
see reference to class template instantiation 'std::array<char,31>' being compiled
C:\Qt\6.2.2\Src\qtbase\include\QtNetwork\../../src/network/ssl/
qsslpresharedkeyauthentica 
tor.h(94): note: see reference to function template instantiation 
'std::array<char,31> 
QtPrivate::typenameHelper<QSslPreSharedKeyAuthenticator*>(void)' being compiled
C:\Qt\6.2.2\Src\qtbase\include\QtCore\../../src/corelib/kernel/qmetatype.h(2376): 
note: 
see reference to class template instantiation 'std::array<char,30>' being compiled
C:\Qt\6.2.2\Src\qtbase\include\QtCore\../../src/corelib/kernel/qmetatype.h(1587): 
note: 
see reference to class template instantiation 'std::array<char,9>' being compiled
C:\Program Files (x86)\Microsoft Visual 
Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\memory(1764): error C2338: 
can't 
delete an incomplete type
C:\Program Files (x86)\Microsoft Visual 
Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\memory(1765): warning C4150: 
deletion of pointer to incomplete type 'QSslCipherPrivate'; no destructor called    
C:\Qt\6.2.2\Src\qtbase\include\QtNetwork\../../src/network/ssl/qsslcipher.h(56): 
note: 
see declaration of 'QSslCipherPrivate'
[1426/8836] Building CXX object 
qtbase\src\tools\qvkgen\CMakeFiles\qvkgen.dir\qvkgen.cpp.obj
ninja: build stopped: subcommand failed.

I've also downloaded the 5.15.x source from here which I'm able to build without issues using the first configure command I posted.

I currently have Strawberry Perl 5.32.x, python 3.10, 3.9.x, and Cmake 3.22.1 installed they're all in my path as well.Per this I meet the requirements. I confirmed the path is correct using where <insert_name.exe> which returns:

where perl.exe
C:\Strawberry\perl\bin\perl.exe
where python.exe
C:\Users\MyNAme\AppData\Local\Programs\Python\Python39\python.exe
C:\Users\MyName\AppData\Local\Programs\Python\Python310\python.exe
where cmake.exe 
C:\Program Files\CMake\bin\cmake.exe
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe

As I was writing this I kept digging and found a ton of bug reports about this same issue. It seems to all come back to OpenSSL. I grabbed the OpenSSL source, I installed NASM and added it to my path. I configured and built OpenSSL with:

perl Configure VC-WIN64A
nmake all

Once OpenSSL finished reconfigured Qt with it:

configure.bat -prefix "C:\Libraries\QT-Static" -release -platform win32-msvc -opensource -confirm-license -make libs -make tools -nomake examples -nomake tests -I "C:\Program Files\OpenSSL\include\openssl" -L "C:\Program Files\OpenSSL\lib"

This time it shows the following:

Qt Network:
getifaddrs() ........................... no
IPv6 ifname ............................ no
libproxy ............................... no
Schannel ............................... yes
OpenSSL ................................ yes
Qt directly linked to OpenSSL ........ no
OpenSSL 1.1 ............................ yes
DTLS ................................... yes
OCSP-stapling .......................... yes
SCTP ................................... no
Use system proxies ..................... yes
GSSAPI ................................. no
Brotli Decompression Support ........... no

Then ran:

cmake --build . --parallel

It still fails but this time with a lot more errors, once again linking back to the OpenSSL issue. I thought maybe it had to do with the CMAKE_CXX_STANDARD flag so I forced 17 instead of allowing MSVC to force latest but no luck. Has anyone managed to get 6.2.2 to build on windows 10, if so how?

Upgrade your compiler to the latest VS2019 version (16.11) - see also https://bugreports.qt.io/browse/QTBUG-97999

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM