Qt5.8 window7 VS2015 64位版本静态编译(支持openssl)

https://blog.csdn.net/qq_30377315/article/details/114000458

已经编译的VS2015 QT64 static版本下载地址:https://download.csdn.net/download/qq_30377315/19780478

已经编译的Openssl64位下载地址:https://download.csdn.net/download/qq_30377315/15506121

Qt5.8 window7 VS2015 64位版本静态编译(支持openssl)步骤如下:

1.下载:qt-opensource-windows-x86-msvc2015_64-5.8.0.exe(安装时要选上源代码,我这里装的是C:\Qt,首次装的可以按我这个一样的目录,方便查找及对下面的目录,如果安装有时也自带了Perl  也要选上,不一定能装上,我刚开始编译不行,后来又行不知道跟这个自己装上 的有没有关系)

下载:Perl             64位

下载:Python3.6   64位

下载:Ruby           64位

安装时都要添加环境,如果没有就在系统变量里把路径加到PATH的后面也行
————————————————

2.下载个openssl的源码吧:

https://www.openssl.org/source/old/1.0.2/  下一个老版本openssl-1.0.2i

打开VS的64位命令工具

cd C:\openssl-1.0.2i

perl Configure VC-WIN64A no-asm --prefix=F:/msvc2015_static2/OpenSSL64   (目录是上面qt生成的,加一个OPenssl64)

ms\do_win64a

nmake -f ms\nt.mak  (编译命令)

nmake -f ms\nt.mak test (测试命令)

nmake -f ms\nt.mak install (安装命令)

最后的F:\msvc2015_static\OpenSSL64即编译好的SSL库
这里我已经把生成的openssl64位库放到了csdn下载地址:https://download.csdn.net/download/qq_30377315/15506121

3.打开C:\Qt\5.8\msvc2015_64\mkspecs\common\msvc-desktop.conf  主要修改以下 MD为MT

QMAKE_CC                = cl
QMAKE_LEX               = flex
QMAKE_LEXFLAGS          =
QMAKE_YACC              = bison -y
QMAKE_YACCFLAGS         = -d
QMAKE_CFLAGS            = -nologo -Zc:wchar_t
QMAKE_CFLAGS_WARN_ON    = -W3
QMAKE_CFLAGS_WARN_OFF   = -W0
QMAKE_CFLAGS_RELEASE    = -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG      = -Zi -MTd
QMAKE_CFLAGS_YACC       =
QMAKE_CFLAGS_LTCG       = -GL

注意: 
Qt5.8.0有一个CPP文件 
qtbase\src\plugins\generic\tuiotouch\qtuiohandler.cpp 
包含了非ASCII字符,需要另存一个带BOM的UTF-8编码文件,替换原文件。否则编译会报错

方便查找路径时记录:路径不在C:\Qt\5.8的可以不用看,(在QMAKE_LEXFLAGS后面加上 –static)有的文章写要,我刚试时没有
C:\Qt\5.8\Src\qtbase\src\plugins\generic\tuiotouch\qtuiohandler.cpp 

C:\Qt\5.8\msvc2015_64\mkspecs\common\msvc-desktop.conf

C:\Qt\5.8\Src\qtbase\mkspecs\common\msvc-desktop.conf
 

4.用以下批处理(任意位置新建xxx.bat):openssl和qt,用其它环境路径自己修改下(我openssl是生成到F:\\msvc2015_static,后来我手动生成一份到F:\\msvc2015_static2)

其实批处理也是在cmd命令窗口调用vs2015命令64们的窗口,来执行的,用批处理只是不想每次都一行一行输,双击一下就搞定,前提是各种路径要正确,不清楚路径多试错几次就清楚了,要不看我的试错文章:https://blog.csdn.net/qq_30377315/article/details/114000458

set MSVC_PATH=C:\Program Files (x86)\Microsoft Visual Studio 14.0
set QMAKESPEC=win32-msvc2015
set QT5_SRC_PATH=C:\Qt\5.8\Src
set QT5_INSTALL_PATH=F:\msvc2015_static
set MSVC_PATH=C:\Program Files (x86)\Microsoft Visual Studio 14.0
set QMAKESPEC=win32-msvc2015
set QT5_SRC_PATH=C:\Qt\5.8\Src
set QT5_INSTALL_PATH=F:\msvc2015_static
set PERL_PATH=D:\Qt\Qt645.8.0\Tools\Perl52213_32\perl
set PYTHON_PATH=C:\Users\Administrator\AppData\Local\Programs\Python\Python38
set RUBY_PATH=D:\OPENGL\rubyinstaller-2.7.2-1-x64
set WIN_FLEX_BISION_PATH=%QT5_SRC_PATH%\gnuwin32\bin   
set OPENSSL_PATH=F:\msvc2015_static\OpenSSL64
set PATH=%QT5_SRC_PATH%\qtbase\bin;%QT5_SRC_PATH%\qtbase\lib;%QT5_SRC_PATH%\gnuwin32\bin;%RUBY_PATH%\bin;%PATH%
set PATH=%PATH%;%PERL_PATH%\bin;%PYTHON_PATH%
set LIB=%LIB%;%OPENSSL_PATH%\lib
set INCLUDE=%INCLUDE%;%OPENSSL_PATH%\include
set PATH=%PATH%;%ICU_PATH%\bin;%OPENSSL_PATH%\bin
call "%MSVC_PATH%\VC\vcvarsall.bat" amd64 
cd /D %QT5_SRC_PATH%
call %QT5_SRC_PATH%\configure -prefix "F:\msvc2015_static" -debug-and-release  -static -static-runtime -opensource -confirm-license -platform win32-msvc2015    -opengl desktop   -qt-zlib -mp   -qt-libpng -qt-libjpeg  -qt-sqlite -qt-freetype  -nomake examples -nomake tests -no-directwrite -openssl-linked -force-debug-info -I "F:\msvc2015_static2\OpenSSL64\include"  -L "F:\msvc2015_static2\OpenSSL64" OPENSSL_LIBS="-libeay32 -ssleay32 -lWs2_32 -lGdi32 -lAdvapi32 -lCrypt32 -lUser32" 
nmake
nmake install
xcopy /y /k "%OPENSSL_PATH%\lib\libeay32.lib" "%QT5_INSTALL_PATH%\lib\"
xcopy /y /k "%OPENSSL_PATH%\lib\ssleay32.lib" "%QT5_INSTALL_PATH%\lib\"
pause

说明上面的批处理我是针对自己编译的openssl,下面的批处理我是从网上下的openssl( http://slproweb.com/products/Win32OpenSSL.html 这里下的64位静态库)

以下是旧的,好像也行,只是刚开始报错我不知道还有Crypt32.lib的东东( http://slproweb.com/products/Win32OpenSSL.html 这里下的64位静态库)

set MSVC_PATH=C:\Program Files (x86)\Microsoft Visual Studio 14.0
set QMAKESPEC=win32-msvc2015
set QT5_SRC_PATH=C:\Qt\5.8\Src
set QT5_INSTALL_PATH=F:\msvc2015_static
set MSVC_PATH=C:\Program Files (x86)\Microsoft Visual Studio 14.0
set QMAKESPEC=win32-msvc2015
set QT5_SRC_PATH=C:\Qt\5.8\Src
set QT5_INSTALL_PATH=F:\msvc2015_static
set PERL_PATH=D:\Qt\Qt645.8.0\Tools\Perl52213_32\perl
set PYTHON_PATH=C:\Users\Administrator\AppData\Local\Programs\Python\Python38
set RUBY_PATH=D:\OPENGL\rubyinstaller-2.7.2-1-x64
set WIN_FLEX_BISION_PATH=%QT5_SRC_PATH%\gnuwin32\bin   
set OPENSSL_PATH=F:\msvc2015_static\OpenSSL64
set PATH=%QT5_SRC_PATH%\qtbase\bin;%QT5_SRC_PATH%\qtbase\lib;%QT5_SRC_PATH%\gnuwin32\bin;%RUBY_PATH%\bin;%PATH%
set PATH=%PATH%;%PERL_PATH%\bin;%PYTHON_PATH%
set LIB=%LIB%;%OPENSSL_PATH%\lib
set INCLUDE=%INCLUDE%;%OPENSSL_PATH%\include
set PATH=%PATH%;%ICU_PATH%\bin;%OPENSSL_PATH%\bin
call "%MSVC_PATH%\VC\vcvarsall.bat" amd64 
cd /D %QT5_SRC_PATH%
call %QT5_SRC_PATH%\configure -prefix "F:\msvc2015_static" -debug-and-release  -static -static-runtime -opensource -confirm-license -platform win32-msvc2015    -opengl desktop   -qt-zlib -mp   -qt-libpng -qt-libjpeg  -qt-sqlite -qt-freetype  -nomake examples -nomake tests -no-directwrite -openssl-linked -force-debug-info  -I "F:\msvc2015_static2\OpenSSL-Win64\include"  -L "F:\msvc2015_static2\OpenSSL-Win64\lib\VC\static" OPENSSL_LIBS="-lWs2_32 -lGdi32 -lAdvapi32 -lCrypt32 -lUser32" OPENSSL_LIBS_DEBUG="-llibssl64MTd -llibcrypto64MTd" OPENSSL_LIBS_RELEASE="-llibssl64MT -llibcrypto64MT" 
nmake
nmake install
xcopy /y /k "%OPENSSL_PATH%\lib\libeay32.lib" "%QT5_INSTALL_PATH%\lib\"
xcopy /y /k "%OPENSSL_PATH%\lib\ssleay32.lib" "%QT5_INSTALL_PATH%\lib\"
pause

好像我生成了有报错,说找不到openssl

不过不影响使用,这个后续会不会有bug不知道,前几次不支持openssl的时候反而不报错

然后把这个lib,include放到要用的qt目录就行了

然后还有一堆报错:(可能跟我的config 编译选项加了-lCrypt32有关,你们可以不加试一下,我就不再试了,也试更多参数了,不是不爱了,只是累了)

1>------ 已启动生成: 项目: QTGuitest, 配置: Debug x64 ------
1>Qt5Networkd.lib(qsslsocket_openssl.obj) : error LNK2019: 无法解析的外部符号 __imp_CertCreateCertificateContext,该符号在函数 "public: void __cdecl QWindowsCaRootFetcher::start(void)" (?start@QWindowsCaRootFetcher@@QEAAXXZ) 中被引用
1>Qt5Networkd.lib(qsslsocket_openssl.obj) : error LNK2019: 无法解析的外部符号 __imp_CertFreeCertificateContext,该符号在函数 "public: void __cdecl QWindowsCaRootFetcher::start(void)" (?start@QWindowsCaRootFetcher@@QEAAXXZ) 中被引用
1>libeay32.lib(e_capi.obj) : error LNK2001: 无法解析的外部符号 __imp_CertFreeCertificateContext
1>Qt5Networkd.lib(qsslsocket_openssl.obj) : error LNK2019: 无法解析的外部符号 __imp_CertGetCertificateChain,该符号在函数 "public: void __cdecl QWindowsCaRootFetcher::start(void)" (?start@QWindowsCaRootFetcher@@QEAAXXZ) 中被引用
1>Qt5Networkd.lib(qsslsocket_openssl.obj) : error LNK2019: 无法解析的外部符号 __imp_CertFreeCertificateChain,该符号在函数 "public: void __cdecl QWindowsCaRootFetcher::start(void)" (?start@QWindowsCaRootFetcher@@QEAAXXZ) 中被引用
1>libeay32.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertOpenStore,该符号在函数 capi_open_store 中被引用
1>libeay32.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertCloseStore,该符号在函数 capi_find_key 中被引用
1>libeay32.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertEnumCertificatesInStore,该符号在函数 capi_find_cert 中被引用
1>libeay32.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertFindCertificateInStore,该符号在函数 capi_find_cert 中被引用
1>libeay32.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertDuplicateCertificateContext,该符号在函数 capi_load_ssl_client_cert 中被引用
1>libeay32.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertGetCertificateContextProperty,该符号在函数 capi_cert_get_fname 中被引用
1>I:\MyQTGuitest\x64\Debug\\QTGuitest.exe : fatal error LNK1120: 10 个无法解析的外部命令
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

别急,这个不是编译的问题,是因为少了库:Crypt32.lib

加上后,编译正常了

//如果用的时候有警告: warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

 

解决方法:项目属性-配置属性-链接器-输入-忽略特定的库:libcmtd.lib

测试一下是否支持https

 QNetworkAccessManager*accessManager = new QNetworkAccessManager();

     qDebug() << accessManager->supportedSchemes();

("ftp", "file", "qrc", "http", "https", "data")

结束了,下一步不知道哪年哪月我才会继续搞支持mysql了

顺带一提:如果要编译webengine

  configure里添加这个参数
-webengine-proprietary-codecs

附上参考的一堆链接:

//vs2015 要是没有qt控件 qt-vsaddin-msvc2015-2.5.1.vsix qt-vs-addin-1.1.9.exe
// https://blog.csdn.net/weixin_36323170/article/details/85255714 QT5.8 百度网盘下载地址
//https://www.bbsmax.com/A/gVdnZ3xadW/  Win7 VS2015 NASM汇编语言环境配置 可能还有(2.14rc15  nasm下载地址 https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D)  https://www.nasm.us/pub/nasm/releasebuilds/2.14rc15/win64/
//ml64 命令错误 http://blog.chinaunix.net/uid-26000296-id-5708856.html  在运行命令:>perl Configure  VC - WIN64A  先执行(批处理)   C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat
//https://blog.csdn.net/py8105/article/details/81234794 qt5.8_for_vs2015 and openssl静态编译
//https://blog.csdn.net/u013015629/article/details/86217249 OpenSSL在Windows7 64bit + vs2015中win64的编译步骤
// https://blog.csdn.net/lixiaoxin1989/article/details/78421573 静态编译OpenSSL并整合到Qt
// openssl1.0.2   https://www.openssl.org/source/openssl-1.0.2o.tar.gz https://www.openssl.org/source/openssl-1.0.2j.tar.gz   http://www.linuxfromscratch.org/blfs/view/7.7/postlfs/openssl.html
//编译openssl 要点,下NASM 下对openssl版本 openssl-1.0.2j.tar.gz ,然后命令和 vs2015命令要分清+先执行   C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat  需要执行下vcvarall.bat,实验vcvarsall.bat  x86_amd64 设置好环境
//别人编译好的ms qt5.7和openssl mysql版本 https://www.npcglib.org/~stathis/blog/precompiled-qt4-qt5/
//静态编译 Qt5.7.0 (含 openssl 支持) https://www.cnblogs.com/bbxx111/p/6003233.html 可能是32位的
//https://blog.csdn.net/lixiaoxin1989/article/details/53838277  Qt 5.7.1/5.8.0/5.9.0 在 msvc2015/mingw32 方式下的静态编译过程 http://www.ruby-lang.org/en/downloads/
//https://blog.csdn.net/py8105/article/details/81198708
//https://blog.csdn.net/lixiaoxin1989/article/details/53838277
//VS2017静态编译QT with openssl https://www.dazhuanlan.com/2019/12/05/5de89f8b2769d/ 在GitHub已经有人写了一个很好用的脚本 https://github.com/fpoussin/Qt5-MSVC-Static

//mysql-connector-odbc-8.0.16-winx64.msi 下载  https://blog.csdn.net/zlsdmx/article/details/96438258
//C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat  有分32位和64位
//qt5.15.1 msvc2019_x64静态编译,带openssl,带mysql csdn有下载
//https://blog.csdn.net/zhouzuoji/article/details/51325204 用MSVC2015编译Qt5.6(包含openssl、webengine)
//当你下载的openssl是高版本的话,如openssl-1.0.2g,需要在这里加上no-asm,表示不使用汇编,如果你不加上的话,在执行nmake命令时会出错。但是如果下载是openssl-1.0.1c,貌似不用加no-asm也可以成功。
//https://blog.csdn.net/universelin/article/details/111224125 QT其它镜像下载地址,有清华大学之类的
//qt 5.1 静态编译 https://www.cnblogs.com/ike_li/p/8615227.html

//https://www.kanzhun.com/jiaocheng/177547.html 32位静态库好像可行的qt5.8 vs2015
//QT5.9.1 + VS2015 静态编译
//Qt5.6.3静态编译+vs2015环境下使用Qt静态库 https://blog.csdn.net/qq_38172137/article/details/85162433
//qt5.2.0 编译x64 vs2010 https://blog.csdn.net/xxxscxxxx/article/details/105298371
//qt编译 安装ICU(好像不装也行,待确认),https://www.cnblogs.com/ppffs/archive/2013/06/21/3147703.html -> http://download.qt-project.org/development_releases/prebuilt/icu/src/icu4c-51_1-src.zip,解压然后,我的路径是:E:\QT Dev\安装包\5.0\icu,然后用vs2012打开文件E:\QT Dev\安装包\5.0\icu\source\allinone\allinone.sln,然后分别以debug和release模式编译一次。然后把E:\QT Dev\安装包\5.0\icu文件夹拷贝到C:\icu下面去,仅仅保留bin;include;lib三个文件夹。其他都删除。然后添加系统环境变量,我这里是添加到administrator的用户环境变量
//采用VS2010进行64位的编译 好像32位和64位没区别 -》》Qt5学习笔记——64位 or 32位  https://www.cnblogs.com/ppffs/archive/2013/06/21/3147703.html

//步骤参考这个,https://www.kanzhun.com/jiaocheng/177547.html  
//命令如下 https://blog.csdn.net/xxxscxxxx/article/details/105298371
//是不是32位的可能就比64位的少-platform win32-msvc2015(好像有没有也没多大区别),我猜的(可能跟第三方比如perl python,下的代码可能有区别),然后用的vs2015tool不一样,一个64位一个32位
// configure -confirm-license -opensource -debug-and-release -static -force-debug-info -prefix "F:\msvc2015_static" -qt-sqlite -qt-pcre -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -nomake tests -nomake examples
// namke

//感觉这个教程不错 如果是qt5.8有些东东还要改一下
// Qt5.11.2 & VS2017 & 64位版本静态编译及使用 https://blog.csdn.net/qq_16395987/article/details/84564728?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=fe8e0cb9-33c1-4856-8ea9-d1164c7231c1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
//qt报错:ERROR: Feature ‘openssl-linked’ was enabled, but the pre-condition ‘!features.securetransport && lib
//qt 4 openssl 静态  https://blog.csdn.net/HalsonHe/article/details/5591291?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.control&dist_request_id=d970bb9a-abc9-4358-b730-a356c2c3fd1f&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.control
// openssl https://blog.csdn.net/liang19890820/article/details/51658574
参考别人的命令: https://www.cnblogs.com/bbxx111/p/6003233.html

// http://slproweb.com/products/Win32OpenSSL.html 这里下的64位静态库

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值