我得到了一个示例项目,它使用 QSslSocket
和 QSslCertificate
从 SSL 证书(Qt 5.7,Windows 10)中获取信息。 QSslSocket::supportsSsl()
函数返回 false,我在运行时遇到这些错误:
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
所以我编译了 OpenSSL_1.1.0 并将其链接到我的项目:
INCLUDEPATH += . "C:/OpenSSL-Win32/include/" LIBS +=
-L"C:/OpenSSL-Win32/lib/" -llibcrypto -llibssl
但还是一样的错误。我下载了 OpenSSL 安装程序,但还是一样。
奇怪的是 QSslSocket::sslLibraryBuildVersionString()
返回 OpenSSL 1.0.2g 1 Mar 2016
,即使我编译并安装了 OpenSSL_1.1.0。
我知道我遗漏了一个简单的细节。请告诉我它是什么。谢谢。
最佳答案
来自文档:
QSslSocket::sslLibraryBuildVersionString()
返回 SSL 库的版本字符串在编译时使用。(强调我的)
你从中得到一个结果并不意味着 Qt 可以访问 OpenSSL,只是它是针对特定版本编译的。这让您知道如果它是动态链接的(默认情况下),您应该在运行时提供哪个二进制兼容版本。
您想检查 QSslSocket::sslLibraryVersionNumber()
- [...] 库的版本在运行时使用(强调我的)。
Qt 可能会尝试在 PATH
中查找 OpenSSL dll 的拷贝,如果没有,则在 QCoreApplication::libraryPaths
给出的路径中查找。在尝试使用 OpenSSL 之前,您应该将 OpenSSL dll 的位置添加到其中一个。
关于c++ - 在 Qt C++ 中使用 OpenSSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39480724/