如何使用openssl 3.0编译Qt 6源代码?

问题描述 投票:0回答:1

我正在尝试使用 OpenSSL 3.0 编译 Qt 源代码

6.6.1
,我已经编译了 OpenSSL 源代码
openssl-3.2.0
并将其文件夹设置为 PATH 变量
C:\Program Files\OpenSSL
它成功地在配置日志中启用了 3.0 选项:

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

但是,现在在编译源代码时,我在

winsock.h
winsock2.h
文件上遇到了很多重新定义错误:

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'
...

完整的构建日志可以在这里

找到

我正在使用

Visual Studio 2022 Developer Command Prompt v17.9.0-pre.3.0
和以下命令进行编译:

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"

经过一番研究,我发现这个答案暗示了包含顺序中的问题。

我想知道我是否遗漏了

configure.bat
命令中的某些内容 或者是 Qt 源代码中的问题。

c++ windows qt openssl
1个回答
0
投票

这是 OpenSSL 3.2 中的问题。本issue对此进行了描述。您可以使用此 pull request 重新安装 OpenSSL 3.2,并且您应该能够编译 Qt 而不会出现此问题。

计划于一月底发布修复此问题的 3.2.1 版本。

© www.soinside.com 2019 - 2024. All rights reserved.