QT5静态编译教程,主要针对vs2012(渡世白玉)

QT5,VS2012静态编译,所有的库准备充分的话qwebkit也可以静态编译通过,但是我编译的版本使用中如果用了QWEBVIEW控件在连接时会出错。

注:我自己编译的环境是:win server 2012 dc版 , vs2012 with update1,qt-everywhere-opensource-src-5.0.2,perl和rupy都是在qt官方给的地址下的最新的X64的,python是2.7 X64的、、、

本文主要针对qt 5.X版本,qt4.X的依赖没那么多,可以酌情参考下,但是好像用途不大、、
编译器主要针对VS2012,vs2010和mingw的就编译时参数换一个就行了,文中会有简单提起、、、
编译主要是静态编译,但是静态编译的话问题很多,我虽然不报错编译完成,但是使用没测试,已知的是我编译的版本qtwebkit使用时 QWEBVIEW控件在连接时会出错。如果您要是动态编译的话在编译依赖库(icu,openssl)时动态编译就行了,在configure时不要-static选项即可。

虽然我编译通过了,但是还是借鉴了网上很多教程,先发借鉴的链接,尊重版权:
http://www.ktao.net/archives/125  //这个编译好像只编译了qtbase,qtwebkit那块原来我准备的连接库不足,没成功,就没再测试。
http://www.cnblogs.com/wader/archive/2013/01/19/qt5_vc2012.html //这个是说动态连接的,但是很对。
http://qt-project.org/wiki/Building_Qt_5_from_Git  //官方的编译方法

1、准备编译需要的环境
  1.1准备编译器
      这个不需要多说了吧?就是安装vs或者mingw、、、
      vs系列可以去:http://msdn.itellyou.cn/ 下载,vs2012或者2010别用太低的版本,qt5要用c++11,只有这俩部分支持、、、
      mingw您可以用qt官方mingw版的,自带的版本,您也可以自己去下,用tdm-gcc安装方便点:http://tdm-gcc.tdragon.net/download,您也可以自己搜、、
   1.2准备其他需要的工具
    qt5还需要perl,pyhon,rupy、、
   Get Perl from: http://www.activestate.com/activeperl/downloads [activestate.com]
   Get Python from: http://www.python.org/download/releases/ [python.org] //有说需要用2.7版版本的。3.3的不行,我是用的2.7,没试试3.3的
   Get Ruby from: http://www.rubyinstaller.org/ [rubyinstaller.org]

2.准备源码
    这个我啥也不用说了吧、、、去官网下载,http://releases.qt-project.org/digia/ 这儿可以下载最新的、、、或者用git下载(这个我也不会用)、、、
  2.x配置源码:如果需要静态编译就需要了,动态编译请跳过:
    先说vs的:修改 源码目录\qtbase\mkspecs\win32-msvc*\qmake.conf   //win32-msvc*,*是您用的vs版本、、、
      找到这几句;
                      QMAKE_CFLAGS_WARN_OFF   = -W0
                       QMAKE_CFLAGS_RELEASE    = -O2 -MD
                     QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi
                    QMAKE_CFLAGS_DEBUG      = -Zi -MDd
    把MD和MDT改成MT和MTD,如下: //因为md是动态连接运行时库,MT是把运行时库包含到程序里
                      QMAKE_CFLAGS_WARN_OFF   = -W0
                       QMAKE_CFLAGS_RELEASE    = -O2 -MT
                     QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
                    QMAKE_CFLAGS_DEBUG      = -Zi -MTd 
    再说mingw的: 修改 源码目录\qtbase\mkspecs\win32-g++\qmake.conf 
   把QMAKE_LFLAGS        =  和QMAKE_LFLAGS_DLL        = -shared 这两句改成:QMAKE_LFLAGS        = -static和QMAKE_LFLAGS_DLL        = -static

3、准备编译需要的库
     icu:这个qtwebkit必须的,qtbase也需要,但是没有的话可以自动跳过。
     地址ICU http://site.icu-project.org/download   下来源码,用您所用的编译器还要再编译成lib或者dll,注意静态链接动态链接。(注,vs2012下静态编译的lib下的lib不能用,要把icu开头的lib掐年都加上个s,保险起见希望加s和不加s都存在吧。)
   openssl: http://www.openssl.org/source/,注意这个编译debug版的不好编译,
  ANGLE-library :这个是把opengl转换连接到DirectX的,地址:http://code.google.com/p/angleproject/,资料不多,我也不会用,可以用 -opengl desktop选项就行了、、
  SQLITE: http://www.sqlite.org/download.html 我不知道需要的是sqlite.dll还是源码,还是sqllite.exe,所以我就把他们都房子一个目录里了。
注意:以上的您要注意debug和release版本、、还有动态编译和静态编译、、、

4、配置环境变量,建议用个bat
     附个我用的bat,上面两个链接也有bat脚本,您根据自己的位置自己修改吧,还有就是mingw的别往加上mingw的环境到bat:
这是我自己配置的32位的qt编译配置。
::配置路径
set QT5_DIR=E:\qt\qtsrc  //设置qt5的目录
set THIRDPARTY_DIR=E:\qt\Build  
::如果您用mingw可以在这儿设置下您的mingw目录
set PATH=%PATH%;D:\Perl64\site\bin;D:\Perl64\bin;D:\Python27;D:\Ruby\bin;  //用mingw就要加东西了
set PATH=%PATH%;%QT5_DIR%\bin;%QT5_DIR%\qtbase\bin;%QT5_DIR%\gnuwin32\bin;

::配置依赖,mingw的可能需要您手动加上库和头文件位置,vs的话您可以打开相应的VS* X86/64 本机命令提示符
set SQLITE3SRCDIR=%THIRDPARTY_DIR%\sqlite
set LIB=%LIB%;%THIRDPARTY_DIR%\icu\win32\lib;%THIRDPARTY_DIR%\icu\win32\libs;%THIRDPARTY_DIR%\openssl\openssl32\lib
set INCLUDE=%INCLUDE%;%THIRDPARTY_DIR%\icu\win32\include;%THIRDPARTY_DIR%\openssl\openssl32\include
set PATH=%PATH%;%THIRDPARTY_DIR%\icu\win32\bin;%THIRDPARTY_DIR%\openssl\openssl32\bin

::配置QT,为了在输入configure配置qt编译选项,我就直接写到bat了、、、
cd %QT5_DIR%
configure -prefix D:\QtSdk\Win32_static -opensource -confirm-license -static -platform win32-msvc2012 -release -c++11 -icu -openssl -opengl desktop -nomake demos -nomake examples -nomake tests-mp

解析下我用的选项:
-prefixD:\QtSdk\Win32_static 设置qt的安装目录,
  -opensource -confirm-license qt的使用协议,这个是使用开源协议,并同意
-static 设置静态编译,动态编译的话,去掉
-platform win32-msvc2012  设置编译起类型,您根据情况歌换成win32-g++或者其他、、
-release 只编译release版的,对应的-debug-and-release 编译debug和release的、、只编译debug的,我想您应该用不到吧、、
-c++11 开启C++11的支持,好像这个选项默认就启用了,gCC 4.7X支持大多数特性了,vs2012页支持很多,vs2010支持少部分、、
-icu -openssl 使用icu和openssl 
-opengl desktop 不准备ANGLE,就要加上这个选项,否则报错、、
-nomake demos -nomake examples -nomake tests 不编译示例,测试、、、
  -mp 使用多核优化编译、、

5、开始编译,然后安装
   nmake(vs系列用), mingw32-make.exe(mingw用)、、jom(如果您准备jom代替nmake的话)
  等吧、、漫长的等待、、然后安装 在您前面的命令,例如 namke,安装就是namke install
注意:安装好后,您还要拷贝几个icu的dll进您的安装的qt里、、
静态编译的qt,需要把icu\bin(64)里的icudt*.dll和icuuc*.dll复制到qt的bin里去、、
静态编译的话还需要把ICU\BIN(64)里的部分lib复制到qt的bin里面去,动态的话应该也需要,但是具体的还要您试下、、
我编译的需要sicuuc.lib,sicuin.dll,sicudt.lib. //您要是感觉麻烦,全部都复制进去、、sicu*.lib前面的lib是自己加的、、、

mingw的编译方法,您也可以看下前面几位前辈的帖子:
链接:
http://www.qtcn.org/bbs/read-htm-tid-52265-fpage-2.html
http://www.qtcn.org/bbs/read-htm-tid-52231-fpage-2.html

另外conf文件中,-O2改成-O1可以精简不少体积,configure的时候传递-ltcg也可以精简库的体积
但是ltcg这个参数用在webkit上会严重报错,因为编译过程中产生的lib的体积已经超出了2G……不过据说可以通过修改webkit的pro来解决

conf文件中,-O2改成-O1按官网上网友的反映是必须的,vs2012 update1及update2都没有改正这个错误(64位对齐),也就是说编译64位VS2012应该没问题(我没试过),编译32位的必须放弃优化速度(包括有一个网友提供的bug fix 也不行 https://bugs.webkit.org/show_bug.cgi?id=90008,(没办法粘贴网址,手工输入的但id=90008核对过))。
编译出来的Qt assistant及designer都不能使用(它们都用到了 webkti),QT有时真操心。
PS:
同一台机器:vs2012编译需要2个小时(差几分)而用vs2010编译只需要58分钟,差的太离谱了吧????
机器配置(i7 3610M, 8G,64位windows7, 镁光M4 128G系统(没在这个盘上编译,在笔记本本机的硬盘,好像是7200转的,外星人m17x r4 7970M显卡)。
最终于放弃vs2012,
原因1:支持xp太难。
原因2:编译32位问题太多。

http://www.qtcn.org/bbs/read-htm-tid-53236-ds-1.html#tpc

时间: 2024-12-16 19:24:03

QT5静态编译教程,主要针对vs2012(渡世白玉)的相关文章

QT5静态编译工程(arm交叉编译)

1.首先,QT编译环境默认是动态库,要编译静态程序是不可能的,所以要下载QT源码,重新编译QT编译环境 2.下载QT源码(5.13版本):http://download.qt.io/development_releases/qt/5.13/5.13.0-rc/single/qt-everywhere-src-5.13.0-rc.tar.xz 3.编译QT前需先配置交叉编译器: 解压源码后,进入源码的qtbase/mkspecs/linux-arm-gnueabi-g++目录,编辑里面的qmake

VS2015静态编译libcurl(C++ curl封装类)

一.最新libcurl静态编译教程(curl-7.51版/curl-7.52版) 1.安装perl,在官网下载,安装好以后,测试perl -v是否成功 2.编译openssl(已编译好的下载地址) perl Configure VC-WIN32 --prefix=D:\openssl ms\do_ms.bat nmake -f ms\nt.mak(静态编译) nmake -f ms\nt.mak install 3.下载libcurl(已编译好的7.51版下载地址 7.52版下载地址) 在源码的

静态编译Qt5.4.1和Qt WebKit

blog文章地址:http://godebug.org/index.php/archives/133/ WebKit是个好东西,做爬虫.显示网页还是想用HTML来做桌面应用的界面都可以用他,不过一直以来都觉得自己编译webkit费力不讨好,所以都是用的qt官方编译好的,至于静态编译webkit,我之前一直以为是根本不可能的.后来看qt forum上说其实是可以的,不过是因为开源协议的问题qt默认的静态编译只是把webkit给排除了,自己编译一下webkit就好了,既然如此,那我就当小白试一下.不

qt5.8.0之静态编译

仔细一算,接触Qt也有六七年了,但总感觉自己仍是菜鸟一枚.小硕毕业进入公司后,进行某一设备的算法研究(matlab+vb,当时对qt是完全的小白),并应用于由外包人员开发的Qt项目.随着项目深入,后面逐步过度到qt的开发道路上来的.在开发完qt程序,发布应用程序的过程中,由于动态库的确实等问题老出现在其他电脑上不能正常运行的情况出现.在这个过程中,偶尔听人说出现这样的情况,多是由于程序是动态编译的愿意,假如能够改成静态编译,这样的问题就能够迎刃而解.从那以后,对qt的静态编译一直从满神往. 由于

用mingw静态编译Qt4.8.2和Qt5.1.1(需要修改不少源码)

因为一些乱七八糟的原因,我需要用mingw静态编译Qt4.8.2和Qt5.1.1.经历了一天的折腾之后,自觉编译一下Qt还是件颇为麻烦的事情,故将过程略作总结,以备不时之需. 首先,在编译之前,我需要下载mingw.qt-everywhere-opensource-src-4.8.2和qt-everywhere-opensource-src-5.1.1. 然后,准备开始编译了,当然先得把压缩包解压到一个合适的地方.我这里的路径是"C:\Qt"下面. 解压完毕后,先试着编译Qt4.8.2

Qt5.2.0 MinGW480 release静态版编译结果、过程及QtCreator配置分享(realfan的编译方法)(configure -h可以显示帮助)(静态编译mysql插件,需要做一些其它工作,机器上要有mysql)(不编译qtwebkit,就不用安装ActivePerl了)(用到 QMediaPlayer的编译办法)

这是我编译好的静态release版,可以直接取用,7z压缩包,解压即用(感谢zzhouqianq提醒)http://yunpan.cn/QDvxdTL9LFLJP (提取码:871c)包含odbc,sqlite,没有webkit如果要自己编译,可以参考下面的过程及需要的文件一.文件准备,下面用到的文件,可以自行到相应官网下载.我在网盘上也共享了:① qt-opensource-windows-x86-mingw48_opengl-5.2.1.exehttp://yunpan.cn/QpMMWfE

Qt5.4静态编译方法

静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库.这样就可以发布单一文件的EXE程序了. 工具/原料 Qt库 Python Perl Ruby 安装Perl 1 双击从官网下载的安装包进入安装界面 2 安装时注意选择这两项 安装Python 1 双击从官网下载的安装包进入安装界面 2 安装完成后,需要将安装目录添加到系统环境变量Path中 安装Ruby 1 双击从

QT5.4 vs2013静态编译之加载静态插件sqlite

1. 很多同学在静态编译QT5完成后, sqlite的驱动老是加载不进去, 原因可能是因为你没有如下操作: #include <QtPlugin> Q_IMPORT_PLUGIN(QSQLiteDriverPlugin) 记得是 QSQLiteDriverPlugin 而不是 qsqlite 当然你在编译的时候的configure 要把插件编进去-plugin-sql-sqlite

Qt5.3.1 静态编译的configure

今天终于自己静态编译过了QT5.3.1, 成功用在项目上了, 记录下configure指令. configure -confirm-license -opensource -platform win32-msvc2013 -mp -debug-and-release -static -prefix "E:\Qt\5.3.1-static-vs2013" -qt-sql-sqlite -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-