【发布时间】:2017-01-21 16:28:20
【问题描述】:
我有一个示例项目,它使用 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文件中添加其导入库,还需要在运行项目时确保其在路径中! -
我删除了
INCLUDEPATH并将LIBS保留在.pro文件中。在%PATH%中添加了OpenSSL 的bin目录。即使我编译了 OpenSSL 1.1.0,QSslSocket::supportsSsl()仍然返回 false 并且QSslSocket::sslLibraryVersionString()返回OpenSSL 1.0.2g 1 Mar 2016 -
将
qDebug() << qgetenv("PATH");添加到main()并确保您的库路径出现在那里并且它是正确的。将调试输出中的库路径复制粘贴到资源管理器窗口并确保其有效。 -
它有
C:\\OpenSSL-Win32\\lib但它无效。最近我在C:\openssl_1.1.0中删除了所有内容并从头开始构建 OpenSSL。我怎样才能改变它?我找不到它的设置。