c++ - 在 Qt C++ 中使用 OpenSSL

标签 c++ qt ssl openssl

我得到了一个示例项目,它使用 QSslSocketQSslCertificate 从 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/

相关文章:

c++ - QT 良好的全局变量/对象处理

c++ - 使用 OpenCV 读取文件夹中的有序图像序列

c++ - 段错误 - C++ 数组

c++ - 共享库中的 undefined symbol 与 g++

c++ - GStreamer 在 Qt5 树莓派中遇到一般流错误

MongoDB 集群升级以使用 SSL/TLS 失败

java - 在同一个 JVM 上设置多个信任库

Java 命名 : Security considerations for difference between and uses of SECURITY_AUTHENTICATION and SECURITY_PROTOCOL

c++ - C++17中数组索引范围的并行for循环

c++ - 为什么这个 float 比较会产生错误?