关于Qt静态便宜的环境等,请先参见 。
首先编译 openssl 。我这里用的版本是 openssl 1.0.2j (新的1.1版本的便宜稍有不同,详见 openssl 的文档)。openssl编译的bat脚本如下:
REM Initialize env for msvc 2015 cl compilerSET PATH=C:\Windows;C:\Windows\system32REM Set up \Microsoft Visual Studio 2015, whereis amd64, x86, etc.CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86REM Update include & lib to support xp win sdk 7.1ASET PATH=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin;%PATH%SET INCLUDE=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;%INCLUDE%SET LIB=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;%LIB%SET CL=/D_USING_V120_SDK71_;%CL%SET PERL_DIR=C:\Perl64SET PATH=%PERL_DIR%\bin;%PATH%perl configure VC-WIN32 no-asm --prefix=d:/openssl/dirms\do_msnmake -f ms\nt.maknmake -f ms\nt.mak install
然后更改Qt的编译脚本,便宜时引入openssl:
REM ********** Initialize env for msvc 2015 cl compiler **********SET PATH=C:\Windows;C:\Windows\system32REM Set up \Microsoft Visual Studio 2015, whereis amd64, x86, etc.CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86REM ********** Update include & lib to support xp win sdk 7.1A **********SET PATH=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin;%PATH%SET INCLUDE=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;%INCLUDE%SET LIB=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;%LIB%SET CL=/D_USING_V120_SDK71_;%CL%REM ********** OpenSSL 1.0.2 **********SET OPENSLLDIR=D:\CollabPDF\windows\vendors\opensslSET PATH=%OPENSLLDIR%\bin;%PATH%SET INCLUDE=%OPENSLLDIR%\include;%INCLUDE%SET LIB=%OPENSLLDIR%\lib;%LIB%REM ********** 3rd party build tools binaries: ruby, perl, python ********** SET PATH=C:\Ruby22-x64\bin;C:\Perl64\bin;C:\Python27;%PATH%REM ********** Set up qt source env **********SET _ROOT=E:\qt-everywhere-opensource-src-5.7.0SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH%REM Uncomment the below line when using a git checkout of the source repositoryREM SET PATH=%_ROOT%\qtrepotools\bin;%PATH%SET QMAKESPEC=win32-msvc2015SET _ROOT=REM Generate makefileconfigure.bat -confirm-license -opensource -platform win32-msvc2015 -debug-and-release -static -target xp -prefix D:\Qt\Qt5.7.0-static-win32-vs2015-xp -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 -mp
其他问题:
- 我第一次尝试使用 openssl 1.1 配合qt进行编译,但报了一个错。猜测可能是因为openssl 1.1版本去除了sslv2支持。所以又改为使用openssl 1.0.2了。
- OPENSSL_LIBS需要引用 gdi32。因为openssl中用到了其中的函数(我没有实际测试是否需要user32,编译太慢,以防万一也加上了)。