在使用QML的時候運行程序的時候遇到了好幾次類似以下問題:
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
qt.network.ssl: QSslSocket: cannot resolve DTLSv1_2_server_method
qt.network.ssl: QSslSocket: cannot resolve DTLSv1_2_client_method
qt.network.ssl: QSslSocket: cannot resolve SSL_CONF_CTX_new
qt.network.ssl: QSslSocket: cannot resolve SSL_CONF_CTX_free
qt.network.ssl: QSslSocket: cannot resolve SSL_CONF_CTX_set_ssl_ctx
qt.network.ssl: QSslSocket: cannot resolve SSL_CONF_CTX_set_flags
qt.network.ssl: QSslSocket: cannot resolve SSL_CONF_CTX_finish
qt.network.ssl: QSslSocket: cannot resolve SSL_CONF_cmd
qt.network.ssl: QSslSocket: cannot resolve SSL_set_alpn_protos
qt.network.ssl: QSslSocket: cannot resolve SSL_CTX_set_alpn_select_cb
qt.network.ssl: QSslSocket: cannot resolve SSL_get0_alpn_selected
qt.network.ssl: QSslSocket: cannot resolve DTLS_server_method
qt.network.ssl: QSslSocket: cannot resolve DTLS_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function DTLS_client_method
————————————————————————————————————————————————
重點來了:最后總結了一下大概可以從以下方法解決:
1、對於Qt mingw版本用戶來說
一般在:
C:\Qt\Qt 5.xx.x\Tools\mingw730_32\opt\bin(32位)
或者:
C:\Qt\Qt 5.xx.x\Tools\mingw730_32\opt\bin(64位)
目錄(以實際安裝路徑為准)可以找到 libeay32.dll ssleay32.dll 兩個文件
1)復制這兩個文件到Qt工程生成可執行文件的目錄(即exe文件同目錄下)中去,再次運行,錯誤消失
2)復制這兩個文件到C:\Qt\Qt 5.xx.x\Qt 5.xx.x\mingwxxx_xx\bin 的目錄下,再次運行,錯誤消失
可以參考這篇文章:👉 (Qt-network.ssl問題報錯)
上方式一般對於mingw版本來說基本可以解決
2、對於Qt MSVC版本用戶來說
A、可以隨便一個Qt C++工程中打印出openssl版本信息
#include <QSslSocket>
qDebug()<<QSslSocket::sslLibraryBuildVersionString();
5.12.3版本為例,執行打印出 OpenSSL 1.1.1b 26 Feb 2019
B、根據相應版本去下載OpenSSL的二進制文件,當然也可以選擇自己編譯,只不過有點麻煩
文件下載地址:http://slproweb.com/products/Win32OpenSSL.html
我下載的是Win64 OpenSSL v1.1.1d Light,完了之后安裝
C、安裝好后在安裝目錄找到 libcrypto-1_1-x64.dll libssl-1_1-x64.dll 兩個文件 ,然后粘貼到
C:\Qt\Qt5.13.0\5.13.0\msvc2017_64\bin目錄再次運行,錯誤消失,完美解決