基本上我需要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日(版本I编译)和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
我真的很感激有关我做错的任何帮助和信息。
答案 0 :(得分:0)
更换&#34; .lib&#34;时出现错误是正常的。通过&#34; .dll&#34;,您无法直接链接到dll。您必须链接到&#34; .lib&#34;,&#34; .dll&#34;将在执行时被要求。但是在构建自己的应用程序时,您不必直接链接到OpenSSL,Qt会在需要时在运行时加载它们。
QSslSocket::sslLibraryBuildVersionString()
返回构建Qt时使用的SSL库的版本。
您需要使用QSslSocket::sslLibraryVersionString()
来获取运行时SSL库的版本号。 QSslSocket::supportsSsl()
提供有关运行时SSL支持的信息,即使在您自己构建Qt时可以使用SSL支持,这些信息也可能无法使用。
根据您的描述,您的程序似乎无法在运行时找到OpenSSL dll。请务必将libeay32.dll
和ssleay32.dll
放在您的exe文件或PATH旁边。