我最近在运行Qt 5.9.1的Windows 10机器上安装了ArcGIS Runtime SDK。尝试使用其中一个 ArcGIS 模板构建简单的QWidget
应用程序时,出现以下错误:
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
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
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
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
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
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
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
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
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
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
这个问题似乎很常见,但是大多数Google结果都为Linux系统提供了答案。
我做了以下工作:
- 下载并安装了OpenSSL(来自GnuWin32 OpenSSL)
- 跨
libeay32.dll
复制并libssl32.dll
到生成文件夹 - 将包含路径添加到 Qt pro 文件中
- 已验证
network
是否在pro文件的QT +=
配置部分中
然而,以上这些都没有产生任何影响。我正在运行 MSVC 2015 32 位套件。
您必须将静态库添加到项目中。
找出libeay32.lib
和libssl32.lib
并将它们添加到您的项目中。
指
http://doc.qt.io/qtcreator/creator-project-qmake-libraries.html
我认为你需要这样一个两个dll文件:libeay32.dll和ssleay32.dll.我使用与你相同的版本qt,所以你可以从这里下载它们或直接从这里获取zip(这对我有用)。
Qt使用的不同版本的openssl lib,所以如果你不确定,你应该使用下面的静态函数在你的代码中测试它:
QSslSocket::sslLibraryBuildVersionString();
如果其他人遇到这个问题,请注意,从版本1.1.0开始,OpenSSL已将其库名称从:
-
libeay32.dll
->libcrypto.dll
-
ssleay32.dll
->libssl.dll
因此,您需要将这两个文件包含在项目中,以便 QSsl 函数正常工作。