静态编译 Qt 5.6
源码下载
- Qt git地址:git://code.qt.io/qt/qt5.git
- 推荐用 SourceTree客户端来克隆源码
准备工作
- 系统 Windows 7或者Windows 10
- 编译器 Visual Studio 2013 Update 5或者Visual Studio 2015 Update 1
- 安装ActivePerl
- 安装Python
- 静态编译ICU库
- ICU库需要把- Debug和- Release版本都编出来
 
- 静态编译openssl
- 编译webkit需要的环境
- 最重要的准备工作
- 关闭360等安全卫士,杀毒软件,编译过程中360会弹框拦截
 
- 使用 - vs2013编译的时候,有可能会遇到以下错误- 1 - Error 2 error C2440: 'default argument' : cannot convert from 'const wchar_t [1]' to 'const BSTR' (src\GAudioOutput.cc) C:\Program Files (x86)\Windows Kits\8.1\Include\um\sapi.h 16917 1 qgroundcontrol - 遇到这个问题,需要修改 - qtbase\mkspecs\common\msvc-base.conf文件,将下面这段删除,如图 
- 编译前,最好将 - git- python- perl- ruby等相关的路径从系统的- PATH环境变量中删除
编译错误
- 编译过程中会遇到以下错误 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10- libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 __imp__BitBlt@36,该符号在函数 _readscreen 中被引用 
 libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 __imp__CreateCompatibleBitmap@12,该符号在函数 _readscreen 中被引用
 libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 __imp__CreateCompatibleDC@4,该符号在函数 _readscreen 中被引用
 libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 __imp__CreateDCA@16,该符号在函数 _readscreen 中被引用
 libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 __imp__DeleteDC@4,该符号在函数 _readscreen 中被引用
 libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 __imp__DeleteObject@4,该符号在函数 _readscreen 中被引用
 libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 __imp__GetBitmapBits@12,该符号在函数 _readscreen 中被引用
 libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 __imp__GetDeviceCaps@8,该符号在函数 _readscreen 中被引用
 libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 __imp__SelectObject@8,该符号在函数 _readscreen 中被引用
 libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 __imp__GetObjectA@12,该符号在函数 _readscreen 中被引用- 这个需要在配置参数中增加一个链接库 - 1 - -L "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib" -l Gdi32 
编译
- 新建一个 environment.bat,用来执行环境变量的设置,代码如下: - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54- @echo off rem 设置vs安装路径 
 set MSVC_PATH=D:\Programs\Microsoft Visual Studio 12.0 rem 设置icu源码路径,在编译icu时用到,编译qt用不到源码
 set ICU_SRC_PATH=D:\Qt\static_build\icu-source\source rem 设置icu编译release安装的路径,在编译icu时用到,编译qt用不到这个格式的路径,注意安装路径格式,是linux风格
 set ICU_INSTALL_PATH=/cygdrive/D/Qt/static_build/icu rem 设置icu编译debug安装的路径,在编译icu时用到,编译qt用不到这个格式的路径,注意安装路径格式,是linux风格
 set ICU_INSTALL_PATH_DEBUG=/cygdrive/D/Qt/static_build/icu-debug rem 设置CYG依赖,在编译icu时用到,编译qt用不到
 set CYG_WIN_PATH=D:\Programs\Dev\cygwin64\bin rem 设置ICU编译release安装的路径,编译Qt会用到,注意格式,是Windows风格
 set ICU_INSTALL_PATH_WIN=D:\Qt\static_build\icu rem 设置ICU编译debug安装的路径,编译Qt会用到,注意格式,是Windows风格
 set ICU_INSTALL_PATH_WIN_DEBUG=D:\Qt\static_build\icu-debug rem 设置openssl源码路径,在编译openssl时用到,编译qt用不到源码
 set OPENSSL_SRC_PATH=D:\Qt\static_build\openssl-1.0.1p rem 设置openssl的最终安装路径,编译qt时会用到
 set OPENSSL_INSTALL_PATH=D:\Qt\static_build\openssl rem 设置编译Qt的编译器配置文件名
 set QMAKESPEC=win32-msvc2013 rem 设置qt的源码路径
 set QT5_SRC_PATH=D:\Qt\static_build\qt5 rem 设置qt编译后的安装路径
 set QT5_INSTALL_PATH=D:\Qt\qt_5.6.0_release_2013_static rem 设置git安装路径
 set GIT_PATH=C:\Program Files\Git rem 设置Perl的bin路径
 set PERL_PATH=D:\Programs\Dev\Perl\bin rem 设置python安装路径
 set PYTHON_PATH=D:\Programs\Dev\Python27 rem qtwebkit依赖环境
 set WIN_FLEX_BISION_PATH=D:\Programs\Dev\win_flex_bison-latest
 set SQLITE3SRCDIR=D:\Qt\3rd\sqlite-amalgamation-3090100
 set RUBY_PATH=D:\Programs\Dev\Ruby22\bin rem 执行MSVC环境设置
 call "%MSVC_PATH%\VC\vcvarsall.bat" x86
- 新建一个 build_qt.bat,用来执行 - qt的编译,代码如下- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33- @echo off call environment.bat set PATH=%QT5_SRC_PATH%\qtbase\bin;%QT5_SRC_PATH%\qtbase\lib;%QT5_SRC_PATH%\gnuwin32\bin;%GIT_PATH%\bin;%PATH% 
 set PATH=%QT5_SRC_PATH%\qtrepotools\bin;%PATH%
 set PATH=%PATH%;%PERL_PATH%;%PYTHON_PATH% set LIB=%LIB%;%ICU_INSTALL_PATH_WIN%\lib;%ICU_INSTALL_PATH_WIN_DEBUG%\lib;%OPENSSL_INSTALL_PATH%\lib
 set INCLUDE=%INCLUDE%;%ICU_INSTALL_PATH_WIN%\include;%OPENSSL_INSTALL_PATH%\include
 set PATH=%PATH%;%ICU_INSTALL_PATH_WIN%\bin;%OPENSSL_INSTALL_PATH%\bin;%ICU_INSTALL_PATH_WIN%\lib;%ICU_INSTALL_PATH_WIN_DEBUG%\lib cd /D %QT5_SRC_PATH% call %QT5_SRC_PATH%\configure -prefix %QT5_INSTALL_PATH% -debug-and-release -force-debug-info -opensource -confirm-license -static -static-runtime -opengl dynamic -mp -icu -openssl-linked -nomake examples -nomake tests -no-compile-examples -target xp -no-directwrite -L "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib" -l Gdi32 nmake nmake install rem 复制openssl和icu到qt安装目录中
 xcopy /y /k "%ICU_INSTALL_PATH_WIN%\lib\sicudt.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%ICU_INSTALL_PATH_WIN%\lib\sicuin.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%ICU_INSTALL_PATH_WIN%\lib\sicuuc.lib" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%ICU_INSTALL_PATH_WIN_DEBUG%\lib\sicudtd.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%ICU_INSTALL_PATH_WIN_DEBUG%\lib\sicuind.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%ICU_INSTALL_PATH_WIN_DEBUG%\lib\sicuucd.lib" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%OPENSSL_INSTALL_PATH%\lib\libeay32.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%OPENSSL_INSTALL_PATH%\lib\ssleay32.lib" "%QT5_INSTALL_PATH%\lib\" pause
- 双击执行 build_qt.bat,整个编译过程可能需要4、5个小时 
- 新建一个 build_qtwebkit.bat,用来执行 - qtwebkit的编译,代码如下- 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62- @echo off call environment.bat set LIB=%LIB%;%ICU_INSTALL_PATH_WIN%\lib;%ICU_INSTALL_PATH_WIN_DEBUG%\lib;%OPENSSL_INSTALL_PATH%\lib;%QT5_INSTALL_PATH%\lib 
 set INCLUDE=%INCLUDE%;%ICU_INSTALL_PATH_WIN%\include;%OPENSSL_INSTALL_PATH%\include;%QT5_INSTALL_PATH%\include
 set PATH=%QT5_INSTALL_PATH%\bin;%WIN_FLEX_BISION_PATH%;%ICU_INSTALL_PATH_WIN%\bin;%OPENSSL_INSTALL_PATH%\bin;%ICU_INSTALL_PATH_WIN%\lib;%ICU_INSTALL_PATH_WIN_DEBUG%\lib;%QT5_SRC_PATH%\gnuwin32\bin;%PERL_PATH%;%PYTHON_PATH%;%RUBY_PATH%;%PATH% cd /D %QT5_SRC_PATH% %PERL_PATH%\perl %QT5_SRC_PATH%\qtwebkit\Tools\Scripts\build-webkit --qt > build_qtwebkit.log rem 复制qtwebkit静态库到qt安装目录中
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\bin\QtTestBrowser.exe" "%QT5_INSTALL_PATH%\bin\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\bin\QtTestBrowser.pdb" "%QT5_INSTALL_PATH%\bin\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\bin\jsc.exe" "%QT5_INSTALL_PATH%\bin\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\bin\jsc.pdb" "%QT5_INSTALL_PATH%\bin\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\bin\ImageDiff.exe" "%QT5_INSTALL_PATH%\bin\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\bin\ImageDiff.pdb" "%QT5_INSTALL_PATH%\bin\" xcopy /s /e /h /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\imports\*.*" "%QT5_INSTALL_PATH%\imports\" xcopy /s /e /h /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\include\*.*" "%QT5_INSTALL_PATH%\include\" xcopy /s /e /h /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\lib\*.*" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\JavaScriptCore\release\JavaScriptCore.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\JavaScriptCore\release\JavaScriptCore.pdb" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\JavaScriptCore\debug\JavaScriptCored.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\JavaScriptCore\debug\JavaScriptCored.pdb" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\ThirdParty\ANGLE\release\ANGLE.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\ThirdParty\ANGLE\release\ANGLE.pdb" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\ThirdParty\ANGLE\debug\ANGLEd.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\ThirdParty\ANGLE\debug\ANGLEd.pdb" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\ThirdParty\leveldb\release\leveldb.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\ThirdParty\leveldb\release\leveldb.pdb" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\ThirdParty\leveldb\debug\leveldbd.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\ThirdParty\leveldb\debug\leveldbd.pdb" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebCore\release\WebCore.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebCore\release\WebCore.pdb" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebCore\debug\WebCored.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebCore\debug\WebCored.pdb" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebKit\release\WebKit1.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebKit\release\WebKit1.pdb" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebKit\debug\WebKit1d.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebKit\debug\WebKit1d.pdb" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebKit2\release\WebKit2.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebKit2\release\WebKit2.pdb" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebKit2\debug\WebKit2d.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WebKit2\debug\WebKit2d.pdb" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WTF\release\WTF.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WTF\release\WTF.pdb" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WTF\debug\WTFd.lib" "%QT5_INSTALL_PATH%\lib\"
 xcopy /y /k "%QT5_SRC_PATH%\qtwebkit\WebKitBuild\Release\Source\WTF\debug\WTFd.pdb" "%QT5_INSTALL_PATH%\lib\" pause
- 如果要重新编译,需要清除之前编译的临时文件,可以新建一个 clean_qt.bat 来执行清理工作,代码如下 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13- @echo off call environment.bat set PATH=%QT5_SRC_PATH%\qtbase\bin;%QT5_SRC_PATH%\qtbase\lib;%QT5_SRC_PATH%\gnuwin32\bin;%GIT_PATH%\bin;%PATH% 
 set PATH=%QT5_SRC_PATH%\qtrepotools\bin;%PATH%
 set PATH=%PATH%;%PERL_PATH%;%PYTHON_PATH% cd /D %QT5_SRC_PATH% git submodule foreach --recursive "git clean -dfx" pause
参考文章
http://wangjie.rocks/2016/04/12/static-compile-qt/
静态编译 Qt 5.6的更多相关文章
- Linux下快速静态编译Qt以及Qt动态/静态版本共存
		Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-open ... 
- Linux/Ubuntu下 静态编译Qt程序
		一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ... 
- Linux下静态编译Qt程序
		一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ... 
- Linux下快速静态编译Qt以及Qt动态/静态版本共存(提供了编译4.6,5.6的精通编译脚本,并且apt-get install 需要的库也全列出来了。还有分析问题的心理过程)good
		qt4.6 Linux./configure -static -release -confirm-license -opensource -qt-zlib -qt-libpng -qt-libjpeg ... 
- Linux下静态编译Qt
		Qt采用编译的方式安装的时候,配置中默认的编译方式是动态编译的,但是有时候你编写的程序要发布出去,带很多动态库文件是很繁琐的,此时就需要静态编译你的程序,Qt要实现静态编译必须库文件也是静态编译的,所 ... 
- 命令行静态编译QT程序
		在.pro文件里加上(非必须)CONFIG += static release windows 静态库必须放在这个路径:C:\Qt\Qt5.3.2_static\bin\qmake -makefile ... 
- wangjie.rocks的静态编译Qt,openssl,icu
		http://wangjie.rocks/2015/12/28/compile-qt/http://wangjie.rocks/2015/12/10/compile-icu/http://wangji ... 
- 记录下 QT Linux 静态编译遇到的坑
		Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-open ... 
- QT全平台设置图标,全平台静态编译 good
		1. 概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装 ... 
随机推荐
- unityd 公布android apk相关
			http://game.ceeger.com/forum/read.php?tid=5918&ds=1 相关的文章非常多,我仅仅记录自己遇到的一些关键点. 1.jdk android SDK ... 
- windows 7、Windows10 系统目录迁移,修改安装的默认路径:Users,Program Files,ProgramData
			Tips:本文只针对Win7.windows 10系统有过测试,其他系统尚未测试:不过大家想尝试也可.这次实验是我做的全新 win7_32位系统来测试的,windows10当然64位的系统也可.至少现 ... 
- JAVA SE回顾及思考(3)——排序算法
			排序的算法是很多公司的笔试和面试题,个人感觉Java中其实无需使用这些排序方法,因为Java中已经为我们提供了很方便效率很高的sort()方法.但是不使用不能代表不需要学习这些算法,也不是仅仅为了面试 ... 
- 《⑨也懂系列:MinGW-w64安装教程》著名C/C++编译器GCC的Windows版本(MinGW-w64在安装的时候可以选择版本,有图,一步一步)
			发布日期 2016年10月31日 分类 教程 标签 编程.软件 前言<⑨也懂系列:MinGW-w64安装教程>这篇文章由 rsreland (http://rsreland.net)于 2 ... 
- elasticsearch-jdbc
			jprante/elasticsearch-jdbc The Java Database Connection (JDBC) importer allows to fetch data from JD ... 
- 组态档(configuration file)与建构档
			组态档,或者叫 configuration file,配置文件.组态档是用一种建构软件专用的特殊编程语言写的 CMake 脚本. 使用组态档能改变程序的设置,而不用重新编译程序. CMake 的组态档 ... 
- vs2008 命令窗口 命令窗口 和 反汇编窗口的使用
			visual studio 的功能相当强大,用了一年多,也只是了解了皮毛.今天学习了一下VS2008 的 即时窗口 命令窗口 和 反汇编窗口的使用.之所以会想到要使用即时窗口是因为最近开发遇到了一个问 ... 
- Windows7配置QT-Android开发环境!
			配置QT5.2.0-Android版本: 进行windows7下的软件开发~不用使用eclipse开发android软件,配置之后就可以向写C++代码一样,去写APP在Android手机上去运行了! ... 
- Linux性能测试 netstat命令
			功能说明:Netstat用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.语 法:netstat [-acCeFghilMnNoprstuvVwx][- ... 
- QT 内存文件映射就是如此简单!
			QFile file(fileName); file.open(QIODevice::ReadWrite ); uchar* fpr = file.map(0, file.size());//映射文件 ... 
