簡體   English   中英

QSslSocket和supportsSsl()返回false

[英]QSslSocket and supportsSsl() returns false

背景

基本上,我需要為我的應用程序提供Openssl支持,最好是通過動態鏈接。 為此,我使用以下代碼編譯了Openssl庫:

perl configure VC-WIN32 no-asm --prefix=C:\Build-OpenSSL-VC-32
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak test
nmake -f ms\ntdll.mak install

使用VC 2017 x86並通過了所有測試。 到現在為止還挺好。 然后我使用以下配置從源代碼編譯了qt5:

configure -debug-and-release -opensource -nomake examples -nomake tests -confirm-license --prefix="C:\Work\qt-bin-5.9-VC-17" -skip webengine -platform win32-msvc -openssl -I C:\Build-OpenSSL-VC-32\include -L C:\Build-OpenSSL-VC-32\lib

VC 2017成功完成了構建過程。此后,我安裝了最新版本的qt-creator。 然后,我配置了qt版本/工具包和新編譯版本的路徑。 此計算機上未安裝其他版本。 接下來,我創建了一個小程序來測試一切是否正常。 這導致QSslSocket :: sslLibraryBuildVersionString()返回OpenSSL 1.0.2l,2017年5月25日(我編譯的版本)和QSslSocket :: supportsSsl()返回false。 注意我包括:

 QT       += network
 INCLUDEPATH += C:\Build-OpenSSL-VC-32\include
 LIBS += C:\Build-OpenSSL-VC-32\lib\libeay32.lib
 LIBS += C:\Build-OpenSSL-VC-32\lib\ssleay32.lib

在.pro文件中。 我嘗試添加.dll而不是.lib文件,但是隨后出現以下錯誤。

C:\Build-OpenSSL-VC-32\bin\libeay32.dll:-1: error: LNK1107: invalid or corrupt file: cannot read at 0x2B8

對於我做錯了的任何幫助和信息,我將非常感謝。

當您用“ .dll”替換“ .lib”時出現錯誤是正常的,您不能直接鏈接到dll。 您必須鏈接到“ .lib”,執行時將需要“ .dll”。 但是在構建自己的應用程序時,您不必直接鏈接到OpenSSL,Qt會在需要時在運行時加載它們。

QSslSocket::sslLibraryBuildVersionString()返回構建Qt時使用的SSL庫的版本。

您需要使用QSslSocket::sslLibraryVersionString()來獲取運行時SSL庫的版本號。 QSslSocket::supportsSsl()在運行時提供有關SSL支持的信息,即使您構建Qt本身時可以使用SSL支持,該信息也可能不可用。

從您的描述來看,您的程序似乎在運行時找不到OpenSSL dll。 確保將libeay32.dllssleay32.dll放在exe文件旁邊或PATH中。

暫無
暫無

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

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