I'm trying to compile the Qt source 6.6.1
with OpenSSL 3.0, i have compiled the OpenSSL source openssl-3.2.0
and set it folder to the PATH variable C:\Program Files\OpenSSL
it sucessfully enabled the 3.0 option in the config log:
Support enabled for:
Using pkg-config ....................... no
Using vcpkg ............................ yes
udev ................................... no
OpenSSL ................................ yes
Qt directly linked to OpenSSL ........ no
OpenSSL 1.1 ............................ no
OpenSSL 3.0 ............................ yes
However, now when compiling the source i'm getting a lot of redefinition errors on winsock.h
and winsock2.h
files:
C:\Qt\w6.6.0>cmake --build . --parallel
[2307/19563] Building CXX object qtbase\src\plugins\tls\op...ndOpenSSLPlugin.dir\RelWithDebInfo\qtlskey_openssl.cpp.obj
FAILED: qtbase/src/plugins/tls/openssl/CMakeFiles/QTlsBackendOpenSSLPlugin.dir/RelWithDebInfo/qtlskey_openssl.cpp.obj
C:\PROGRA~1\MICROS~1\2022\Preview\VC\Tools\MSVC\1439~1.334\bin\Hostx64\x64\cl.exe /nologo /TP -DNOMINMAX -DOPENSSL_API_COMPAT=0x10100000L -DQT_CORE_LIB -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_UP_TO=0x040800 -DQT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH -DQT_LEAN_HEADERS=1 -DQT_NETWORK_LIB -DQT_NO_AS_CONST -DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_QEXCHANGE -DQT_PLUGIN -DQT_WARN_DEPRECATED_UP_TO=0x070000 -DQTlsBackendOpenSSLPlugin_EXPORTS -DUNICODE -DWIN32 -DWIN64 -D_CRT_SECURE_NO_WARNINGS -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 -DCMAKE_INTDIR=\"RelWithDebInfo\" -IC:\Qt\w6.6.0\qtbase\src\plugins\tls\openssl\QTlsBackendOpenSSLPlugin_autogen\include_RelWithDebInfo -IC:\Qt\w6.6.0\qtbase\src\plugins\tls\openssl -IC:\Qt\w6.6.0\qtbase\include -I"C:\Program Files\OpenSSL\include" -IC:\Qt\w6.6.0\qtbase\src\network -IC:\Qt\w6.6.0\qtbase\include\QtNetwork\6.6.1 -IC:\Qt\w6.6.0\qtbase\include\QtNetwork\6.6.1\QtNetwork -IC:\Qt\w6.6.0\qtbase\src\corelib -IC:\Qt\w6.6.0\qtbase\include\QtCore\6.6.1 -IC:\Qt\w6.6.0\qtbase\include\QtCore\6.6.1\QtCore -IC:\Qt\w6.6.0\qtbase\include\QtCore -IC:\Qt\w6.6.0\qtbase\mkspecs\win32-msvc -IC:\Qt\w6.6.0\qtbase\include\QtNetwork /DWIN32 /D_WINDOWS /Zi /DNDEBUG -O2 -Ob3 -std:c++17 -MD /W3 /EHs-c- /wd4530 /wd4577 -Zc:__cplusplus -permissive- -utf-8 -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:ternary -Zc:externConstexpr -Zc:wchar_t -bigobj -guard:cf -Gw /showIncludes /Foqtbase\src\plugins\tls\openssl\CMakeFiles\QTlsBackendOpenSSLPlugin.dir\RelWithDebInfo\qtlskey_openssl.cpp.obj /Fdqtbase\src\plugins\tls\openssl\CMakeFiles\QTlsBackendOpenSSLPlugin.dir\RelWithDebInfo\ /FS -c C:\Qt\w6.6.0\qtbase\src\plugins\tls\openssl\qtlskey_openssl.cpp
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared\ws2def.h(103): warning C4005: 'AF_IPX': macro redefinition
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um\winsock.h(457): note: see previous definition of 'AF_IPX'
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared\ws2def.h(147): warning C4005: 'AF_MAX': macro redefinition
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um\winsock.h(476): note: see previous definition of 'AF_MAX'
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared\ws2def.h(187): warning C4005: 'SO_DONTLINGER': macro redefinition
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um\winsock.h(399): note: see previous definition of 'SO_DONTLINGER'
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared\ws2def.h(240): error C2011: 'sockaddr': 'struct' type redefinition
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um\winsock.h(482): note: see declaration of 'sockaddr'
...
The full build log can be found here
I'm compiling using Visual Studio 2022 Developer Command Prompt v17.9.0-pre.3.0
with the following command:
configure.bat -debug-and-release -platform win32-msvc -opensource -confirm-license -force-debug-info -webengine-proprietary-codecs -feature-vulkan -no-schannel -openssl-runtime -prefix "C:\Qt\w6.6.0"
After some research, I found this answer that suggests a problem in the order of the includes.
I wonder if I'm missing something in the configure.bat
command
or if it's a problem in the Qt source code.
This is an issue in OpenSSL 3.2, as described here. You could reinstall OpenSSL 3.2 with this pull request and you should be able to compile Qt without this problem.
A 3.2.1 release fixing this problem is planned for the end of January.