• 静态编译 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库需要把DebugRelease版本都编出来
    • 静态编译openssl
    • 编译webkit需要的环境
    • 最重要的准备工作
      • 关闭360等安全卫士,杀毒软件,编译过程中360会弹框拦截
    • 使用 vs2013 编译的时候,有可能会遇到以下错误

      1
      Error 2 error C2440: 'default argument' : cannot convert from 'const wchar_t [1]' to 'const BSTR'   (srcGAudioOutput.cc) C:Program Files (x86)Windows Kits8.1Includeumsapi.h 16917 1 qgroundcontrol

      遇到这个问题,需要修改 qtbasemkspecscommonmsvc-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:ProgramsMicrosoft Visual Studio 12.0

      rem 设置icu源码路径,在编译icu时用到,编译qt用不到源码
      set ICU_SRC_PATH=D:Qtstatic_buildicu-sourcesource

      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:ProgramsDevcygwin64in

      rem 设置ICU编译release安装的路径,编译Qt会用到,注意格式,是Windows风格
      set ICU_INSTALL_PATH_WIN=D:Qtstatic_buildicu

      rem 设置ICU编译debug安装的路径,编译Qt会用到,注意格式,是Windows风格
      set ICU_INSTALL_PATH_WIN_DEBUG=D:Qtstatic_buildicu-debug

      rem 设置openssl源码路径,在编译openssl时用到,编译qt用不到源码
      set OPENSSL_SRC_PATH=D:Qtstatic_buildopenssl-1.0.1p

      rem 设置openssl的最终安装路径,编译qt时会用到
      set OPENSSL_INSTALL_PATH=D:Qtstatic_buildopenssl

      rem 设置编译Qt的编译器配置文件名
      set QMAKESPEC=win32-msvc2013

      rem 设置qt的源码路径
      set QT5_SRC_PATH=D:Qtstatic_buildqt5

      rem 设置qt编译后的安装路径
      set QT5_INSTALL_PATH=D:Qtqt_5.6.0_release_2013_static

      rem 设置git安装路径
      set GIT_PATH=C:Program FilesGit

      rem 设置Perl的bin路径
      set PERL_PATH=D:ProgramsDevPerlin

      rem 设置python安装路径
      set PYTHON_PATH=D:ProgramsDevPython27

      rem qtwebkit依赖环境
      set WIN_FLEX_BISION_PATH=D:ProgramsDevwin_flex_bison-latest
      set SQLITE3SRCDIR=D:Qt3rdsqlite-amalgamation-3090100
      set RUBY_PATH=D:ProgramsDevRuby22in

      rem 执行MSVC环境设置
      call "%MSVC_PATH%VCvcvarsall.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%qtbasein;%QT5_SRC_PATH%qtbaselib;%QT5_SRC_PATH%gnuwin32in;%GIT_PATH%in;%PATH%
      set PATH=%QT5_SRC_PATH%qtrepotoolsin;%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%in;%OPENSSL_INSTALL_PATH%in;%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%libsicudt.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%ICU_INSTALL_PATH_WIN%libsicuin.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%ICU_INSTALL_PATH_WIN%libsicuuc.lib" "%QT5_INSTALL_PATH%lib"

      xcopy /y /k "%ICU_INSTALL_PATH_WIN_DEBUG%libsicudtd.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%ICU_INSTALL_PATH_WIN_DEBUG%libsicuind.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%ICU_INSTALL_PATH_WIN_DEBUG%libsicuucd.lib" "%QT5_INSTALL_PATH%lib"

      xcopy /y /k "%OPENSSL_INSTALL_PATH%liblibeay32.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%OPENSSL_INSTALL_PATH%libssleay32.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%in;%WIN_FLEX_BISION_PATH%;%ICU_INSTALL_PATH_WIN%in;%OPENSSL_INSTALL_PATH%in;%ICU_INSTALL_PATH_WIN%lib;%ICU_INSTALL_PATH_WIN_DEBUG%lib;%QT5_SRC_PATH%gnuwin32in;%PERL_PATH%;%PYTHON_PATH%;%RUBY_PATH%;%PATH%

      cd /D %QT5_SRC_PATH%

      %PERL_PATH%perl %QT5_SRC_PATH%qtwebkitToolsScriptsuild-webkit --qt > build_qtwebkit.log

      rem 复制qtwebkit静态库到qt安装目录中
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseinQtTestBrowser.exe" "%QT5_INSTALL_PATH%in"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseinQtTestBrowser.pdb" "%QT5_INSTALL_PATH%in"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseinjsc.exe" "%QT5_INSTALL_PATH%in"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseinjsc.pdb" "%QT5_INSTALL_PATH%in"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseinImageDiff.exe" "%QT5_INSTALL_PATH%in"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseinImageDiff.pdb" "%QT5_INSTALL_PATH%in"

      xcopy /s /e /h /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseimports*.*" "%QT5_INSTALL_PATH%imports"

      xcopy /s /e /h /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseinclude*.*" "%QT5_INSTALL_PATH%include"

      xcopy /s /e /h /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaselib*.*" "%QT5_INSTALL_PATH%lib"

      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceJavaScriptCore eleaseJavaScriptCore.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceJavaScriptCore eleaseJavaScriptCore.pdb" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceJavaScriptCoredebugJavaScriptCored.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceJavaScriptCoredebugJavaScriptCored.pdb" "%QT5_INSTALL_PATH%lib"

      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceThirdPartyANGLE eleaseANGLE.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceThirdPartyANGLE eleaseANGLE.pdb" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceThirdPartyANGLEdebugANGLEd.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceThirdPartyANGLEdebugANGLEd.pdb" "%QT5_INSTALL_PATH%lib"

      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceThirdPartyleveldb eleaseleveldb.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceThirdPartyleveldb eleaseleveldb.pdb" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceThirdPartyleveldbdebugleveldbd.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceThirdPartyleveldbdebugleveldbd.pdb" "%QT5_INSTALL_PATH%lib"

      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebCore eleaseWebCore.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebCore eleaseWebCore.pdb" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebCoredebugWebCored.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebCoredebugWebCored.pdb" "%QT5_INSTALL_PATH%lib"

      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebKit eleaseWebKit1.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebKit eleaseWebKit1.pdb" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebKitdebugWebKit1d.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebKitdebugWebKit1d.pdb" "%QT5_INSTALL_PATH%lib"

      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebKit2 eleaseWebKit2.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebKit2 eleaseWebKit2.pdb" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebKit2debugWebKit2d.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWebKit2debugWebKit2d.pdb" "%QT5_INSTALL_PATH%lib"

      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWTF eleaseWTF.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWTF eleaseWTF.pdb" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWTFdebugWTFd.lib" "%QT5_INSTALL_PATH%lib"
      xcopy /y /k "%QT5_SRC_PATH%qtwebkitWebKitBuildReleaseSourceWTFdebugWTFd.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%qtbasein;%QT5_SRC_PATH%qtbaselib;%QT5_SRC_PATH%gnuwin32in;%GIT_PATH%in;%PATH%
      set PATH=%QT5_SRC_PATH%qtrepotoolsin;%PATH%
      set PATH=%PATH%;%PERL_PATH%;%PYTHON_PATH%

      cd /D %QT5_SRC_PATH%

      git submodule foreach --recursive "git clean -dfx"

      pause

    参考文章

    编译 Qt 5.6

    http://wangjie.rocks/2016/04/12/static-compile-qt/

  • 相关阅读:
    手写RPC
    随机生成6位的字符串验证码,要求包含数字,大小写字母
    输出学习阶段目标
    吃货联盟
    判断是否为整数
    实现一个登录注册功能
    作业1
    年龄异常
    作业2
    作业1
  • 原文地址:https://www.cnblogs.com/findumars/p/6339334.html
Copyright © 2020-2023  润新知