我拿到一个使用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。
我知道我缺少一个简单的细节。请告诉我这是什么。谢谢。
INCLUDEPATH
是不必要的,因为你并不直接使用 openssl 编译任何代码。你只需要LIBS += ...
这一行就可以了。如果 openssl 被编译为动态链接库,你不仅需要在.pro
文件中添加它的导入库,还需要确保在运行项目时它在路径中! - Kuba hasn't forgotten Monica.pro
文件中删除了INCLUDEPATH
并保留了LIBS
。将OpenSSL的bin
目录添加到%PATH%
中。仍然无法通过QSslSocket::supportsSsl()
返回true,而且QSslSocket::sslLibraryVersionString()
返回的是OpenSSL 1.0.2g 1 Mar 2016
,尽管我已经编译了OpenSSL 1.1.0。 - Mustafa Chelikmain()
中添加qDebug() << qgetenv("PATH");
,确保您的库路径出现在其中并且是正确的。将库路径从调试输出中复制粘贴到资源管理器窗口中,并确保它是有效的。 - Kuba hasn't forgotten MonicaC:\\OpenSSL-Win32\\lib
,但是无效。最近我删除了所有内容,并从头开始在C:\openssl_1.1.0
中构建了OpenSSL。我该如何更改它?我找不到它的设置。 - Mustafa ChelikC:\OpenSSL-Win32\lib
不在%PATH%
中。我不知道Qt从哪里获得它!我删除了所有内容,因为OpenSSL_1.1.0与Qt不兼容。我编译了Qt使用的OpenSSL_1.0.2g。无论如何,遗憾的是我仍然得到相同的错误。感谢您的回复,Kuba。 - Mustafa Chelik