背景:项目中使用的Qt环境不支持https请求,原因是 源码编译的时候没有链接相应的ssl库文件。需要重新编译qt
第一步 先编译Openssl
1)安装perl,并配置环境变量
下载地址:
http://downloads.activestate.com/ActivePerl/releases/5.26.1.2601/ActivePerl-5.26.1.2601-MSWin32-x64-404865.exe
2)下载Openssl源码https://www.openssl.org/source/
找到相应的版本,我用的是openssl-1.0.2l
解压文件后,用 vs2017命令行工具cd到相应目录
perl Configure VC-WIN32 no-asm --prefix=D:\QtAddSsl\OpenSSL
D:\QtAddSsl\OpenSSL是编译后的目录
其中VC-WIN32是对应平台,如果是64位的话就是VC-WIN64A(当然,如果你要用得是英特尔的安腾系列64位处理器的话就是VC-WIN64I了,但是我想应该没有人用……),no-asm的意思是不使用汇编代码,如果用的话会出现许多奇奇怪怪的问题。–prefix参数指定的是最后的安装目录
下一步:
ms\do_ms
因为我们是静态编译,所以输入
nmake -f ms\nt.mak
为了验证可以输入
nmake -f ms\nt.mak test
看到passed all tests的话说明没有问题,可以继续,输入
nmake -f ms\nt.mak install
完成openssl的编译
这样会在
D:\QtAddSsl\OpenSSL\lib
目录下生成
libeay32.lib ssleay32.lib
第二步 :编译QT
1:安装qt-opensource-windows-x86-msvc2015-5.6.3.exe,需要勾选Source Components
2:修改\Qt5.6.3\5.6.3\Src\qtbase\mkspecs\common\msvc-desktop.conf文件:
将
QMAKE_CFLAGS_RELEASE = -O2 -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MDd
改为
QMAKE_CFLAGS_RELEASE = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG = -Zi -MTd
3.编译安装qt,在configure命令中,prefix参数值为编译安装目录。这里编译出来的是动态库。编译时间大约在3,4个小时左右
打开开始菜单中"Visual Studio 2017"中的"VS 2017的开发人员命令提示符",输入以下命令:
cd \Qt5.6.3\5.6.3\Src
configure -confirm-license -opensource -platform win32-msvc2015 -debug-and-release -shared -target xp -prefix “E:\Qt-msvc2015-shared-mt-addSsl” -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32 -lGdi32 -lUser32" -no-qml-debug -no-angle -nomake tests -nomake examples
nmake && nmake install
ps: OPENSSL_LIBS="-lssleay32 -llibeay32 -lGdi32 -lUser32"
这几个库文件,要在环境变量LIB里面
疑惑的地方:
- 源码编译qt的时候,
为了编译进 ssl,用到如下命令
OPENSSL_LIBS="-lssleay32 -llibeay32 -lGdi32 -lUser32"
但是 像Gdi32 User32 在windows上 有好多版本,到底用哪个呢? 而且 是否需要 将这些lib文件所在目录加入到环境变量呢?
参考:
https://blog.csdn.net/qazxdrcssc2006/article/details/73497226