【问题标题】:QSslSocket and supportsSsl() returns falseQSslSocket 和 supportsSsl() 返回 false
【发布时间】:2018-04-17 18:25:56
【问题描述】:

背景

基本上,我的应用程序需要 Openssl 支持,最好是通过动态链接。为此,我使用以下内容编译了 Openssl 库:

perl configure VC-WIN32 no-asm --prefix=C:\Build-OpenSSL-VC-32
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak test
nmake -f ms\ntdll.mak install

使用 VC 2017 x86 所有测试均通过。到目前为止,一切都很好。然后我使用以下配置从源代码编译了 qt5:

configure -debug-and-release -opensource -nomake examples -nomake tests -confirm-license --prefix="C:\Work\qt-bin-5.9-VC-17" -skip webengine -platform win32-msvc -openssl -I C:\Build-OpenSSL-VC-32\include -L C:\Build-OpenSSL-VC-32\lib

VC 2017 的构建过程成功。之后我安装了最新版本的 qt-creator。然后我配置了新编译版本的 qt 版本/工具包和路径。此计算机上未安装其他版本。接下来我创建了一个小程序来测试一切是否正常。这导致 QSslSocket::sslLibraryBuildVersionString() 返回 OpenSSL 1.0.2l 25 May 2017(我编译的版本),并且 QSslSocket::supportsSsl() 返回 false。注意我已经包括:

 QT       += network
 INCLUDEPATH += C:\Build-OpenSSL-VC-32\include
 LIBS += C:\Build-OpenSSL-VC-32\lib\libeay32.lib
 LIBS += C:\Build-OpenSSL-VC-32\lib\ssleay32.lib

在 .pro 文件中。我尝试添加 .dll 而不是 .lib 文件,但随后出现以下错误。

C:\Build-OpenSSL-VC-32\bin\libeay32.dll:-1: error: LNK1107: invalid or corrupt file: cannot read at 0x2B8

我非常感谢任何有关我做错了什么的帮助和信息。

【问题讨论】:

    标签: c++ windows qt visual-c++ openssl


    【解决方案1】:

    将“.lib”替换为“.dll”时出现错误是正常的,不能直接链接到dll。您必须链接到“.lib”,执行时需要“.dll”。但是在构建自己的应用程序时不必直接链接到 OpenSSL,Qt 会在需要时在运行时加载它们。

    QSslSocket::sslLibraryBuildVersionString() 返回构建 Qt 时使用的 SSL 库的版本。

    您需要使用QSslSocket::sslLibraryVersionString() 来获取运行时 SSL 库的版本号。 QSslSocket::supportsSsl() 在运行时提供有关 SSL 支持的信息,即使在您构建 Qt 本身时 SSL 支持可用,这些信息也可能不可用。

    根据您的描述,您的程序似乎无法在运行时找到 OpenSSL dll。请务必将 libeay32.dllssleay32.dll 放在您的 exe 文件旁边或您的 PATH 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多