本人使用qt5.7.1+msvc2015寫一個https的客戶端程序,但是用到解析https協議時,報出如下錯誤
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導致。
openssl 大部分為下載源碼自己編譯,然后調用dll庫,也有exe安裝版本,但是網站要錢
源碼地址:https://www.openssl.org/
安裝版軟件地址:http://slproweb.com/products/Win32OpenSSL.html
我使用的是這個版本:https://www.openssl.org/source/openssl-1.0.2m.tar.gz
按照以下博客說明安裝完成:https://blog.csdn.net/liang19890820/article/details/51658574
csdn博客上所說,大部分都對。
只是我nmake命令的時候,一直缺少h文件,知道是環境變量的問題,本來想通過將h文件拷貝到此目錄下解決,但估計lib環境也沒有,這么做麻煩,遂放棄
后來通過使用vs2015 自帶的命令提示符cmd軟件,在這里運行能夠繼承vs的所有環境
接下來將openssl安裝目錄中的bin下:libeay32.dll ssleay32.dll 拷貝到qt目錄中有Qt5Network.dll & Qt5Networkd.dll 目錄中即可
(我實際拷貝的是:bin/libeay32.dll, bin/ssleay32.dll lib/libeay.lib lib/ssyeay.lib)沒試驗過不帶lib是否可行
最后值得一說的是,qt5.7.1中是自帶 libeay32.dll &ssleay32.dll 的 在目錄:C:\Qt\Qt5.7.1\Tools\QtCreator\bin
但我將這兩個dll拷貝到Qt5Network.dll目錄下時,無法工作,所以我時默認的“自帶的不工作ssl庫不工作”這一結論的。