簡體   English   中英

QSslSocket:無法調用未解析的函數

[英]QSslSocket: cannot call unresolved function

我使用Qt Creator 4.2.0運行Qt 5.7.1(MSVC 2015,32位)。 我有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工作,可以給我步驟讓套接字工作或有任何建議?

我最終通過谷歌搜索到了這里。 在我的情況下,我在隨機機器上收到此錯誤因為他們錯過了libeay32.dllssleay32.dll的正確版本。 它是“隨機的”,因為有些計算機將這些計算機從其他軟件加載到PATH ,而有些則沒有。

我通過將DLL添加到我的Qt安裝的bin文件夾中為Qt Creator修復了這個問題,並通過在我的發行版中包含上述DLL來修復此問題。

這些DLL應該與Qt首先編譯的OpenSSL版本相同或類似。 如果您沒有自己編譯,從Qt 5.4開始,您可以使用QSslSocket::sslLibraryBuildVersionString()進行查詢。 (信用: https//stackoverflow.com/a/42297296/1666676

不要忘記您的64位應用程序應該具有64位版本的DLL,而32位應用程序應該具有32位DLL,因此您不會遇到與問題相同的問題。


補充說明:

  • 從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*.dlllibssl-1_1*.dll 標准Qt發行版尚未使用截至2018年9月的版本。
  • OpenSSL GitHub下載在這里: https//github.com/openssl/openssl/tags

希望這有助於下一個人。 抱歉復活舊帖子。

將這兩個文件復制到路徑:'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

你需要手動添加對OppenSSL的支持,因為android放棄了對它的支持,我使用的是QT 5.9而且它不適合你,所以你的任務是創建openSSL lib

您可以直接在這里下載https://wiki.openssl.org/index.php/Binaries

或者在這里https://indy.fulgan.com/SSL/

然后復制這些文件並將它們包含在您的項目中

libcrypto.so
libssl.so

這應該正常工作

或者您可以使用此腳本生成libcrypto.solibssl.so ,只需按步驟操作https://github.com/ekke/android-openssl-qt

通過結合現有答案和一些研究,我設法使其與MSVC2017 x64編譯器一起使用:

  1. 從這里下載1.0版本(Win64 OpenSSL v1.0.2r Light): https//slproweb.com/products/Win32OpenSSL.html
  2. 安裝時,選擇將DLL復制到OpenSSL bin目錄。
  3. 然后將libeay32.dllssleay32.dll從OpenSSL bin文件夾復制到: {Your_Qt_Folder}/{Qt_version}/msvc2017_64/bin

我解決了這個問題。

  1. 下載並安裝v1.0.2s << - ( libeay32.dllssleay32.dll ), 網址https://slproweb.com/products/Win32OpenSSL.html

  2. 復制libeay32.dllssleay32.dll

  3. 在Qt文件夾中找到QtNetwork*.dll 在我的例子中,路徑是C:\\Qt\\Tools\\QtCreator\\bin

  4. libeay32.dllssleay32.dll粘貼到C:\\Qt\\Tools\\QtCreator\\bin

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM