MinGW下静态编译、链接Qt 5.0
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相关推荐
- 从四个问题透析Linux下C++编译链接
摘要:编译&链接对C&C++程序员既熟悉又陌生,熟悉在于每份代码都要经历编译&链接过程,陌生在于大部分人并不会刻意关注编译&链接的原理.本文通过开发过程中碰到的四个典型 ...
- Windows 7下vc2010编译使用redis 3.0
Windows 7下vc2010编译使用redis 3.0 项目中,有多台机器频繁读写.同步一些参数.起初的方案是通过MySQL的临时表实现,对效率有一些影响,故改为redis方案.项目中redis和 ...
- 易语言静态连接器提取_易语言静态编译链接器切换工具
使用说明 将exe程序和"链接器目录配置.ini"文件,复制到易语言安装目录的"tools"文件夹下 并且对"链接器目录配置.ini"进行修 ...
- Linux下静态编译的一个TIP
Linux下静态编译的一个TIP | 素包子 Linux下静态编译的一个TIP 2010年3月28日 baoz 阅读评论 linux下静态编译好处很多,一来是可以跨发行版(debian redhat ...
- Mingw下g++编译执行顺序错误
今天写一个简单的线性表时,用Mingw中的g++编译.调试.运行时发现一个奇怪的现象:程序的执行顺序与实际编写顺序不一致. 编译环境:代码编写 win7下 editplus + Mingw 4. ...
- 易语言静态编译链接器大全(为EIDE助手准备滴)
点击阅读原文 本文中的各个链接器收集于网络,汇总在一起,方便广大易友下载使用: 易语言的大部分支持库是 使用 vc6 编译, 所以, 推荐大家使用 vc6的链接器: 如果使用 其他链接库编译出现问题, ...
- Linux环境下gcc编译链接库-lz -lrt -lm -lc都是什么库?
编译链接库:-lz -lrt -lm -lc都是什么库 -lz 压缩库(Z) -lrt 实时库(real time):shm_open系列 -lm 数学库(math) -lc ...
- linux下静态编译mupdf,在Qt中调用Mupdf库进行pdf显示
2018.5.10 更新内存对齐说明 感谢知乎网友@孤独子狮指出QImage处需要考虑内存对齐的问题.因为本人缺乏跨平台.图形库开发经验,所以在调试成功后就没有深入探究. 主要修改了QImage的构造 ...
- matlab 设置perl解释器,Windows环境下静态编译Perl语言解释器(perl.exe)
前言 实际上我从来没有使用过Perl语言,我对它的认知,也仅限于它能干很多事情,但核心功能是处理正则表达式,那么为什么会想要编译它呢?因为我是一个命令行工具收集控,我收集命令行工具的原则是单个exe文 ...
最新文章
- ipad php mysql_PHP中的MYSQL常用函数
- PHP中的静态属性、静态方法、常量属性
- 查询最近一千条数据mysql_保留mysql数据库中的最新1000条记录
- JQuery中ajax方法访问web服务
- SpringBoot_定制banner
- Visual C++ 时尚编程百例005(菜单)
- 终端、虚拟控制台与伪终端
- Hibernate中使用Criteria查询及注解——(Dept.java)
- Asp.net输出Excel文件并且下载该文件以及某些细节问题解决
- html 单行文本(input text)
- 卡住 安装_【书中有路】弹簧式安全阀结构原理、故障解析、安装要点
- 局域网打印机共享怎么设置_XP系统设置局域网共享打印机的操作步骤
- 视频文件服务器加速,百度云加速视频加速缓存设置教学
- 中文繁简互换以及获取中文字符串首字母
- 降维打击(序列化)的流行手段
- 【css】巧用border制作三角形
- 【CTR预估】The Wide and Deep Learning Model(译文+Tensorlfow源码解析)
- K-近邻算法全面解析
- 公司举办的拓展活动有感!
- 计算机指数函数算法框图,计算指数函数的算法
热门文章
- oracle 27140,ORA-27140 ORA-27300 ORA-27301
- flex socket java,Flex的socket与java使用amf3进行通信
- matlab循环前后变量定义,Matlab for 多个变量循环能不能这样啊 ,求教高手!!!!...
- 如何看exe文件源代码_杀进程、删文件...看新型勒索软件RobbinHood如何干掉杀毒软件...
- python中ifelifelse用在什么结构_详解Python if-elif-else知识点
- 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
- Effective C++ -- 零散知识点整理
- 【Linux】18.设置静态ip的方法(Ubuntu系统、nas、Red-Hat系统)
- 机器学习——深度学习(Deep Learning)经典资料
- Spring IOC 容器源码分析 - 余下的初始化工作