在Qt c++中使用OpenSSL
Use OpenSSL in Qt C++
我得到了一个使用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的位置添加到其中一个。
相关文章:
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 静态编译的Qt 5.13.1与OpenSSL 1.1.1d生成QSslSocket::connectToHostEncr
- 指定Qt查找OpenSSL DLL的位置
- 强制系统 QT 库使用应用程序附带的 openssl 库
- 加密任务使用QT崩溃,Openssl该怎么办
- 如何在Windows上安装QT的OpenSSL 1.1.0
- 我如何将OpenSSL包含在Linux上的Qt程序中
- 使用 OpenSSL Qt 解密 DES,C++
- 从源代码构建Qt静态,启用OpenSSL支持
- 使用OpenSSL(Windows)的Qt中出现编译错误LNK2019
- 编译支持 OpenSSL 的 Windows Phone 8.1 Qt 5.5 时出现问题
- QT https SSL支持静态QT静态程序构建 - 仍然需要openssl dll
- 编译带有 openSSL 错误的静态 Qt
- 在Linux上使用QtWebkit和OpenSSL部署Qt应用程序时出现问题
- QT + OpenSSL + Android
- 链接openssl到Qt失败
- Sha512哈希在QT通过OpenSSL
- QT C++ - OpenSSL AES - EVP.h
- 在Qt c++中使用OpenSSL