Qt、WIndows 和 OpenSSL - 无法调用未解析的函数 xyz



我最近在运行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.liblibssl32.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 函数正常工作。

最新更新