背景
基本上,我的应用程序需要一个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\libVC 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我真的很感谢任何人的帮助和关于我做错了什么的信息。
发布于 2017-11-06 23:11:07
当您用".dll“替换".lib”时出现错误是正常的,您不能直接链接到dll。您必须链接到".lib",执行时将需要".dll“。但在构建自己的应用程序时,你不应该直接链接到OpenSSL,Qt会在需要时在运行时加载它们。
QSslSocket::sslLibraryBuildVersionString()返回构建Qt时使用的SSL库的版本。
您需要使用QSslSocket::sslLibraryVersionString()来获取运行时SSL库的版本号。QSslSocket::supportsSsl()在运行时提供了关于SSL支持的信息,即使在构建Qt时SSL支持是可用的,这些信息也可能不可用。
根据您所描述的,您的程序似乎无法在运行时找到OpenSSL动态链接库。确保将libeay32.dll和ssleay32.dll放在exe文件旁边或路径中。
https://stackoverflow.com/questions/47122578
复制相似问题