QSslSocket:无法调用未解析的函数
QSslSocket: cannot call unresolved function
我是 运行 Qt 5.7.1(MSVC 2015,32 位)和 Qt Creator 4.2.0。我对 QSslSocket
有疑问。我收到以下错误:
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
我已前往以下位置 openssl github 并下载了 zip 文件。我已将 "libeay32.dll" 和 "ssleay32.dll" 文件移动到我的发布目录,但我仍然收到这些错误。有谁已经 QSslSocket
工作,可以给我一些步骤让套接字工作或有任何建议吗?
您需要手动添加对 OppenSSL 的支持,因为 android 放弃了对它的支持,而我使用的是 QT 5.9,它不适合您
所以你的任务是创建 openSSL lib
您可以直接在这里下载
https://wiki.openssl.org/index.php/Binaries
或此处https://indy.fulgan.com/SSL/
然后复制这些文件并将它们包含到您的项目中
libcrypto.so
libssl.so
那应该可以正常工作
或者您可以使用此脚本生成 libcrypto.so
和 libssl.so
, 跟着它一步步来
https://github.com/ekke/android-openssl-qt
我通过谷歌搜索最终来到这里。在我的例子中,我在随机机器 上收到此错误,因为它们缺少 libeay32.dll
和 ssleay32.dll
的正确版本。它是 "random",因为有些计算机从其他软件 PATH
中加载了这些内容,而有些则没有。
我通过将 DLL 添加到我的 Qt 安装的 bin
文件夹中为 Qt Creator 修复了这个问题,我通过在我的发行版中包含上述 DLL 来修复了这个发行版。
DLL 应该与最初编译 Qt 时使用的 OpenSSL 版本相同或相似。如果你没有自己编译它,从 Qt 5.4 开始你可以用 QSslSocket::sslLibraryBuildVersionString()
. (Credit: )
查询它
不要忘记您的 64 位应用程序应该有 64 位版本的 DLL,而 32 位应用程序应该有 32 位 DLL,这样您就不会遇到与 [=19] 相同的问题=].
补充说明:
- 从 Qt 5.2 开始,您必须使用 1.0.0 或更新版本。 0.9.8 不再有效。 (来源:http://doc.qt.io/qt-5/ssl.html)
- 对于我的 Qt 5.10.1 的标准 MSVC2017x64 发行版
sslLibraryBuildVersionString()
返回 "OpenSSL 1.0.2o"。我的发行版使用 1.0.2p。
- 从 OpenSSL 1.1.0 开始,OpenSSL DLL 更名为
libcrypto-1_1*.dll
和 libssl-1_1*.dll
。截至 2018 年 9 月,标准 Qt 发行版尚未使用这些发行版。
- OpenSSL GitHub 下载地址:https://github.com/openssl/openssl/tags
希望这对下一个人有帮助。很抱歉复活了一个旧的post。
将这两个文件复制到路径:'C:\Qt\Tools(msvc/mingw){version}\bin'
C:\Qt\Tools\(msvc|mingw)\opt\bin\libeay32.dll
C:\Qt\Tools\(msvc|mingw)\opt\bin\ssleay32.dll
通过结合此处的现有答案和一些研究,我设法使其适用于 MSVC2017 x64 编译器:
- 从这里下载 1.0 版本(Win64 OpenSSL v1.0.2r Light):
https://slproweb.com/products/Win32OpenSSL.html
- 安装时,选择复制DLL到OpenSSL bin目录。
- 然后将 libeay32.dll 和 ssleay32.dll 从 OpenSSL bin 文件夹复制到:
{Your_Qt_Folder}/{Qt_version}/msvc2017_64/bin
我解决了这个问题。
在 https://slproweb.com/products/Win32OpenSSL.html 下载并安装 v1.0.2s <<--(libeay32.dll
, ssleay32.dll
)
复制libeay32.dll
和ssleay32.dll
在您的 Qt 文件夹中找到 QtNetwork*.dll
。在我的例子中,路径是 C:\Qt\Tools\QtCreator\bin
.
将libeay32.dll
和ssleay32.dll
粘贴到C:\Qt\Tools\QtCreator\bin
。
我是 运行 Qt 5.7.1(MSVC 2015,32 位)和 Qt Creator 4.2.0。我对 QSslSocket
有疑问。我收到以下错误:
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
我已前往以下位置 openssl github 并下载了 zip 文件。我已将 "libeay32.dll" 和 "ssleay32.dll" 文件移动到我的发布目录,但我仍然收到这些错误。有谁已经 QSslSocket
工作,可以给我一些步骤让套接字工作或有任何建议吗?
您需要手动添加对 OppenSSL 的支持,因为 android 放弃了对它的支持,而我使用的是 QT 5.9,它不适合您 所以你的任务是创建 openSSL lib
您可以直接在这里下载 https://wiki.openssl.org/index.php/Binaries
或此处https://indy.fulgan.com/SSL/
然后复制这些文件并将它们包含到您的项目中
libcrypto.so
libssl.so
那应该可以正常工作
或者您可以使用此脚本生成 libcrypto.so
和 libssl.so
, 跟着它一步步来
https://github.com/ekke/android-openssl-qt
我通过谷歌搜索最终来到这里。在我的例子中,我在随机机器 上收到此错误,因为它们缺少 libeay32.dll
和 ssleay32.dll
的正确版本。它是 "random",因为有些计算机从其他软件 PATH
中加载了这些内容,而有些则没有。
我通过将 DLL 添加到我的 Qt 安装的 bin
文件夹中为 Qt Creator 修复了这个问题,我通过在我的发行版中包含上述 DLL 来修复了这个发行版。
DLL 应该与最初编译 Qt 时使用的 OpenSSL 版本相同或相似。如果你没有自己编译它,从 Qt 5.4 开始你可以用 QSslSocket::sslLibraryBuildVersionString()
. (Credit:
不要忘记您的 64 位应用程序应该有 64 位版本的 DLL,而 32 位应用程序应该有 32 位 DLL,这样您就不会遇到与 [=19] 相同的问题=].
补充说明:
- 从 Qt 5.2 开始,您必须使用 1.0.0 或更新版本。 0.9.8 不再有效。 (来源:http://doc.qt.io/qt-5/ssl.html)
- 对于我的 Qt 5.10.1 的标准 MSVC2017x64 发行版
sslLibraryBuildVersionString()
返回 "OpenSSL 1.0.2o"。我的发行版使用 1.0.2p。 - 从 OpenSSL 1.1.0 开始,OpenSSL DLL 更名为
libcrypto-1_1*.dll
和libssl-1_1*.dll
。截至 2018 年 9 月,标准 Qt 发行版尚未使用这些发行版。 - OpenSSL GitHub 下载地址:https://github.com/openssl/openssl/tags
希望这对下一个人有帮助。很抱歉复活了一个旧的post。
将这两个文件复制到路径:'C:\Qt\Tools(msvc/mingw){version}\bin'
C:\Qt\Tools\(msvc|mingw)\opt\bin\libeay32.dll
C:\Qt\Tools\(msvc|mingw)\opt\bin\ssleay32.dll
通过结合此处的现有答案和一些研究,我设法使其适用于 MSVC2017 x64 编译器:
- 从这里下载 1.0 版本(Win64 OpenSSL v1.0.2r Light): https://slproweb.com/products/Win32OpenSSL.html
- 安装时,选择复制DLL到OpenSSL bin目录。
- 然后将 libeay32.dll 和 ssleay32.dll 从 OpenSSL bin 文件夹复制到:
{Your_Qt_Folder}/{Qt_version}/msvc2017_64/bin
我解决了这个问题。
在 https://slproweb.com/products/Win32OpenSSL.html 下载并安装 v1.0.2s <<--(
libeay32.dll
,ssleay32.dll
)复制
libeay32.dll
和ssleay32.dll
在您的 Qt 文件夹中找到
QtNetwork*.dll
。在我的例子中,路径是C:\Qt\Tools\QtCreator\bin
.将
libeay32.dll
和ssleay32.dll
粘贴到C:\Qt\Tools\QtCreator\bin
。