2019独角兽企业重金招聘Python工程师标准>>>

本文讨论的将是MinGW之上的静态编译 ,并且将抛开万年难伺候的QtWebkit进行编译。

一、编译Qt 5.0

与Qt 4.x不同的地方:

1、Qt 5.0比以往相比,需要有perl环境。因此要在你的环境变量中添加perl。

2、configure当中去除了一些参数,比如no-webkit,同时又添加了一些,比如icu。

3、Webkit和QtCore都需要ICU。ICU是一个处理unicode的库,如果你没有准备,webkit的编译自动跳过,core的编译使用其它方法避开ICU。

4、由于QPA的存在,与平台相关的部分被抽象成了插件,这个后面再说。

5、默认启用了ANGLE作为OpenGL 和DirectX之间的桥梁,如果你没有准备ANGLE,需要额外的-opengl desktop参数

6、默认支持C++11。基于此,推荐使用支持C++11的编译器。我这里使用的是TDM的32位版本,有兴趣的可以在这里找到: http://tdm-gcc.tdragon.net/

静态编译Qt最基本的需要将gcc的几个dll变成静态链接,因为我使用了TDM,所以没有这方面的后顾之忧,如果你使用原始的gcc,是需要修改mkspecs中的make.conf的,给gcc传入参数-static -static-libgcc的。

同时也请注意,如果你需要一同编译debug版本,不要编译静态的。

我所使用的configure:

configure -release -opensource -qmake -prefix "..\qt5\qt5-x86-static" -c++11 -platform win32-g++ -qt-zlib -qt-libpng -qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista -nomake tests -nomake demos -nomake examples -opengl desktop

二、静态链接

Qt 5.0重新翻修了插件部分,并且修改了部分宏的作用,以及上面提及的第4点。因此,和Qt 4.x的链接有些不同,我们需要在自己的pro当中这样写:

CONFIG+=static
static{
        QTPLUGIN+=qwindows qico
        DEFINES+=QT_PLUGIN_STATIC_LINK
        LIBS+=-L"$(QTDIR)/plugins/platforms"
        LIBS+=-L"$(QTDIR)/plugins/imageformats"
        message("Staticbuild.")
}

这里说明一下。这个qmake片段只在static时候执行。因为前面特地写了CONFIG+=static的关系,这里的static{}才得以执行。QTPLUGIN宏引入两个插件,这使得这两个库将被纳入链接;DEFINES定义了一个宏,这个宏我们需要在代码 中用到;LIBS两行分别引入两个插件库的路径;最后一行是个提示语。

现在,打开main.cpp或者新建一个cpp,写入如下内容:

#ifdefQT_PLUGIN_STATIC_LINK
#include<QtCore/QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);
Q_IMPORT_PLUGIN(QICOPlugin);
#endif
注意,这里就是和Qt 4.x最大的不同。原有的Q_IMPORT_PLUGIN宏需要的是插件名,而从Qt5开始则变成了插件的类名。另外这里的分号是我额外加上的,不加也可以,但Qt Creator会提示有问题。

这里面的qwindows对应的就是QWindowsIntegrationPlugin,而qico对应的则是QICOPlugin。

现在程序应该可以正常链接、运行了。

三、参考

http://www.formortals.com/build- ... intel-gcc-compiler/
http://www.formortals.com/how-to-statically-link-qt-4/
http://lists.qt-project.org/pipe ... 12-July/000401.html
https://bugreports.qt-project.org/browse/QTBUG-24496
https://github.com/lordmulder/La ... eff8bc03a2eff2f4111
https://blog.qt.digia.com/blog/2 ... -library-with-qt-2/

转载于:https://my.oschina.net/mickelfeng/blog/102034

MinGW下静态编译、链接Qt 5.0相关推荐

  1. 从四个问题透析Linux下C++编译链接

    摘要:编译&链接对C&C++程序员既熟悉又陌生,熟悉在于每份代码都要经历编译&链接过程,陌生在于大部分人并不会刻意关注编译&链接的原理.本文通过开发过程中碰到的四个典型 ...

  2. Windows 7下vc2010编译使用redis 3.0

    Windows 7下vc2010编译使用redis 3.0 项目中,有多台机器频繁读写.同步一些参数.起初的方案是通过MySQL的临时表实现,对效率有一些影响,故改为redis方案.项目中redis和 ...

  3. 易语言静态连接器提取_易语言静态编译链接器切换工具

    使用说明 将exe程序和"链接器目录配置.ini"文件,复制到易语言安装目录的"tools"文件夹下 并且对"链接器目录配置.ini"进行修 ...

  4. Linux下静态编译的一个TIP

    Linux下静态编译的一个TIP | 素包子 Linux下静态编译的一个TIP 2010年3月28日 baoz 阅读评论 linux下静态编译好处很多,一来是可以跨发行版(debian redhat ...

  5. Mingw下g++编译执行顺序错误

    今天写一个简单的线性表时,用Mingw中的g++编译.调试.运行时发现一个奇怪的现象:程序的执行顺序与实际编写顺序不一致. 编译环境:代码编写  win7下   editplus + Mingw 4. ...

  6. 易语言静态编译链接器大全(为EIDE助手准备滴)

    点击阅读原文 本文中的各个链接器收集于网络,汇总在一起,方便广大易友下载使用: 易语言的大部分支持库是 使用 vc6 编译, 所以, 推荐大家使用 vc6的链接器: 如果使用 其他链接库编译出现问题, ...

  7. Linux环境下gcc编译链接库-lz -lrt -lm -lc都是什么库?

    编译链接库:-lz -lrt -lm -lc都是什么库 -lz      压缩库(Z) -lrt     实时库(real time):shm_open系列 -lm     数学库(math) -lc ...

  8. linux下静态编译mupdf,在Qt中调用Mupdf库进行pdf显示

    2018.5.10 更新内存对齐说明 感谢知乎网友@孤独子狮指出QImage处需要考虑内存对齐的问题.因为本人缺乏跨平台.图形库开发经验,所以在调试成功后就没有深入探究. 主要修改了QImage的构造 ...

  9. matlab 设置perl解释器,Windows环境下静态编译Perl语言解释器(perl.exe)

    前言 实际上我从来没有使用过Perl语言,我对它的认知,也仅限于它能干很多事情,但核心功能是处理正则表达式,那么为什么会想要编译它呢?因为我是一个命令行工具收集控,我收集命令行工具的原则是单个exe文 ...

最新文章

  1. ipad php mysql_PHP中的MYSQL常用函数
  2. PHP中的静态属性、静态方法、常量属性
  3. 查询最近一千条数据mysql_保留mysql数据库中的最新1000条记录
  4. JQuery中ajax方法访问web服务
  5. SpringBoot_定制banner
  6. Visual C++ 时尚编程百例005(菜单)
  7. 终端、虚拟控制台与伪终端
  8. Hibernate中使用Criteria查询及注解——(Dept.java)
  9. Asp.net输出Excel文件并且下载该文件以及某些细节问题解决
  10. html 单行文本(input text)
  11. 卡住 安装_【书中有路】弹簧式安全阀结构原理、故障解析、安装要点
  12. 局域网打印机共享怎么设置_XP系统设置局域网共享打印机的操作步骤
  13. 视频文件服务器加速,百度云加速视频加速缓存设置教学
  14. 中文繁简互换以及获取中文字符串首字母
  15. 降维打击(序列化)的流行手段
  16. 【css】巧用border制作三角形
  17. 【CTR预估】The Wide and Deep Learning Model(译文+Tensorlfow源码解析)
  18. K-近邻算法全面解析
  19. 公司举办的拓展活动有感!
  20. 计算机指数函数算法框图,计算指数函数的算法

热门文章

  1. oracle 27140,ORA-27140 ORA-27300 ORA-27301
  2. flex socket java,Flex的socket与java使用amf3进行通信
  3. matlab循环前后变量定义,Matlab for 多个变量循环能不能这样啊 ,求教高手!!!!...
  4. 如何看exe文件源代码_杀进程、删文件...看新型勒索软件RobbinHood如何干掉杀毒软件...
  5. python中ifelifelse用在什么结构_详解Python if-elif-else知识点
  6. 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
  7. Effective C++ -- 零散知识点整理
  8. 【Linux】18.设置静态ip的方法(Ubuntu系统、nas、Red-Hat系统)
  9. 机器学习——深度学习(Deep Learning)经典资料
  10. Spring IOC 容器源码分析 - 余下的初始化工作