zoukankan      html  css  js  c++  java
  • 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的:修改 源码目录qtbasemkspecswin32-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的: 修改 源码目录qtbasemkspecswin32-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:qtqtsrc  //设置qt5的目录
    set THIRDPARTY_DIR=E:qtBuild  
    ::如果您用mingw可以在这儿设置下您的mingw目录
    set PATH=%PATH%;D:Perl64sitein;D:Perl64in;D:Python27;D:Rubyin;  //用mingw就要加东西了
    set PATH=%PATH%;%QT5_DIR%in;%QT5_DIR%qtbasein;%QT5_DIR%gnuwin32in;

    ::配置依赖,mingw的可能需要您手动加上库和头文件位置,vs的话您可以打开相应的VS* X86/64 本机命令提示符
    set SQLITE3SRCDIR=%THIRDPARTY_DIR%sqlite
    set LIB=%LIB%;%THIRDPARTY_DIR%icuwin32lib;%THIRDPARTY_DIR%icuwin32libs;%THIRDPARTY_DIR%opensslopenssl32lib
    set INCLUDE=%INCLUDE%;%THIRDPARTY_DIR%icuwin32include;%THIRDPARTY_DIR%opensslopenssl32include
    set PATH=%PATH%;%THIRDPARTY_DIR%icuwin32in;%THIRDPARTY_DIR%opensslopenssl32in

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



    解析下我用的选项:
    -prefixD:QtSdkWin32_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,需要把icuin(64)里的icudt*.dll和icuuc*.dll复制到qt的bin里去、、
    静态编译的话还需要把ICUBIN(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

  • 相关阅读:
    _bzoj1061 [Noi2008]志愿者招募【最小费用最大流】
    _bzoj2243 [SDOI2011]染色【树链剖分】
    _bzoj1013 [JSOI2008]球形空间产生器sphere【高斯消元】
    _bzoj1002 [FJOI2007]轮状病毒【瞎搞】
    leetcode 273 Integer to English Words
    leetcode 12 Integer to Roman
    leetcode 1071 Greatest Common Divisor of Strings
    lc6 ZigZag Conversion
    lc13 Roman to Integer
    leetcode 171 Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/findumars/p/5251453.html
Copyright © 2011-2022 走看看