静态编译 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‘   (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环境变量中删除

编译错误

  • 编译过程中会遇到以下错误

    12345678910
    libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 [email protected]36,该符号在函数 _readscreen 中被引用libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 [email protected]12,该符号在函数 _readscreen 中被引用libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 [email protected]4,该符号在函数 _readscreen 中被引用libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 [email protected]16,该符号在函数 _readscreen 中被引用libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 [email protected]4,该符号在函数 _readscreen 中被引用libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 [email protected]4,该符号在函数 _readscreen 中被引用libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 __imp__Get[email protected]12,该符号在函数 _readscreen 中被引用libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 [email protected]8,该符号在函数 _readscreen 中被引用libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 [email protected]8,该符号在函数 _readscreen 中被引用libeay32.lib(rand_win.obj) : error LNK2019: 无法解析的外部符号 [email protected]12,该符号在函数 _readscreen 中被引用

    这个需要在配置参数中增加一个链接库

    1
    -L "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib" -l Gdi32

编译

  • 新建一个 environment.bat,用来执行环境变量的设置,代码如下:

    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
    @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-latestset SQLITE3SRCDIR=D:\Qt\3rd\sqlite-amalgamation-3090100set RUBY_PATH=D:\Programs\Dev\Ruby22\bin
    
    rem 执行MSVC环境设置call "%MSVC_PATH%\VC\vcvarsall.bat" x86
  • 新建一个 build_qt.bat,用来执行qt的编译,代码如下
    123456789101112131415161718192021222324252627282930313233
    @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%\libset INCLUDE=%INCLUDE%;%ICU_INSTALL_PATH_WIN%\include;%OPENSSL_INSTALL_PATH%\includeset 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的编译,代码如下
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
    @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%\libset INCLUDE=%INCLUDE%;%ICU_INSTALL_PATH_WIN%\include;%OPENSSL_INSTALL_PATH%\include;%QT5_INSTALL_PATH%\includeset 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 来执行清理工作,代码如下
    12345678910111213
    @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

参考文章

编译 Qt 5.6

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

时间: 2024-10-21 15:46:13

静态编译 Qt 5.6的相关文章

Linux下快速静态编译Qt以及Qt动态/静态版本共存

Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-opensource-src的tar包,到网上一查,乖乖,大部分人编译这个包居然花费了12-13个小时!但是,根据我在Windows下静态编译Qt的经验,其实这之中很多东西都是可以不用编译的,最终我大约用了40分钟编译完成了全部内容.如果你直接使用官方的sdk安装,那么你就已经有了一个动态库,现在你又通过源

Linux下静态编译Qt程序

一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序,这个程序在发给别人后,他们可以直接打开,而不需要特别地去先安装Qt库,那就需要采用静态编译了. 在Linux下如何静态编译Qt程序呢? 首先需要先安装静态编译的Qt,也就是静态编译Qt程序首先是需要一个静态编译安装的Qt   1.下载源安装程序,如 qt-x11-opensource-src-4.

QT中如何使用MYSQL 以及静态编译QT中如何加上MYSQL(2)

接上一篇的续写: 前文提到"最终写一个demo的my sql工程  发现可以成功运行,但是找不到 创建的数据库文件 原因再查找" 注意 上面这个问题对应的代码是如下的: #include <QDebug> #include <QSqlDatabase> #include <QSqlQuery> #include "mainwindow.h" #include "ui_mainwindow.h" MainWind

Linux下静态编译Qt

Qt采用编译的方式安装的时候,配置中默认的编译方式是动态编译的,但是有时候你编写的程序要发布出去,带很多动态库文件是很繁琐的,此时就需要静态编译你的程序,Qt要实现静态编译必须库文件也是静态编译的,所以在此介绍一下qt如何来进行静态编译 第一步:下载源码包 Qt/X11版本:qt-x11-opensource-src-x.x.x.tar.gz 第二步:解压缩 tar zxvf qt-x11-opensource-src-x.x.x.tar.gz 第三步:进入到刚才解压缩后的文件夹下并进行配置,如

vs2013 静态编译Qt和配置方法

编译方法很简单,请看文章: http://wenku.baidu.com/view/6749dbab700abb68a982fba6 需要主要的是: 1:opengl 支持,如文章 2:opengl不支持,如下: configure -confirm-license -opensource -platform win32-msvc2013  -debug-and-release -static -prefix "E:\Qt\5.3.2-static-vs2013" -qt-sql-sq

记录下 QT Linux 静态编译遇到的坑

Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-opensource-src的tar包,到网上一查,乖乖,大部分人编译这个包居然花费了12-13个小时!但是,根据我在Windows下静态编译Qt的经验,其实这之中很多东西都是可以不用编译的,最终我大约用了40分钟编译完成了全部内容.如果你直接使用官方的sdk安装,那么你就已经有了一个动态库,现在你又通过源

QT全平台设置图标,全平台静态编译 good

1.  概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装文件. QT开发的程序发布的时候经常采用两种方式: l  静态编译,可生成单一的可执行文件. l  动态编译,需同时附上需要的dll文件. 2.  发布准备 不管采用哪种方式,首先我们要把项目的发布做一些准备,例如:准备程序的图标,将项目编译成release等.   2.1. 设置程序图标 应用程序

Qt静态编译总结

一.什么是qt Qt是著名的跨平台C++界面库,甚至可以运行在嵌入式设备上(基于framebuffer),拥有自己的集成开发环境Qt Creator.在linux上的两大桌面环境gnome和kde,前者是基于GTK+(主要用C开发),而后者就是基于Qt(主要用C++开发). 二.安装qt4.3.5和编译动态版exe * 安装最新的qt开源版,但因为现在的qt比较臃肿,所以我选择了比较旧的4.3.5版 下载地址在:http://download.qt-project.org/archive/qt/

Qt 5.9.3 如何静态编译和部署?

Qt 5.9.3 如何静态编译和部署? MSVC2015 x86 静态编译 Qt 部署静态库 VS2015 部署静态库 1. MSVC2015 x86 静态编译 1.1 Qt 官网下载最新源代码 立即下载 1.2 参考 Qt 官网提供的教程 Qt for Windows - Building from Source Qt Configure Options Qt for Windows - Requirements 参考上面文档后,发现需要安装以下依赖: ActivePerl Python 成功