QT程序在windows下部署发布
转载:http://www.cnblogs.com/Fan_Fan/archive/2010/05/29/1746860.html
QT程序在windows下部署发布
以下包括了部分网上收集的,以及qt帮助里的内容(Deploying an Application on Qt/Windows)
首先,打开windows控制台,然后,找到vs安装目录下的bin里,执行 vcvars32.bat 这个脚本。执行完之后,vs需要的所有环境变量就已经设置好了。
我的环境是QT 4.3.3 + mingw32-make
部署发布QT程序有两种方法:
第一种,静态编译,可生成单一的可执行文件。
第二种,动态编译,需同时附上需要的dll文件。
第一种 静态编译
1 编译QT。
要静态编译,首先要求QT是静态编译过的。在QT目录下执行:
configure.exe -static -release
make sub-src
就可以编译出静态库。如果只是用来分发程序,也可以mingw32-make release sub-src只编译一个静态库。
这个过程需要1-2个小时。QT目录会变成1.8G左右。注:mingw32-make和make是一样的。
如果用VC2005平台,在编译Qt的时候,configure.exe -static -platform win32-msvc2005
然后nmake sub-src或者nmake release sub-src完成静态编译。
2 编译程序。
然后到你自己的程序目录下执行:
make clean
qmake -config release
make
这时会得到一个非常大的可执行程序,但也会有一个重要的问题,就是图片文件显示不出来。
按照QT帮助的说法,QT里的jpeg,gif等图片的支持都是以插件的形式存在的,现在我们还没有包含任何插件。
在main.cpp里:
#include
#include //这个
Q_IMPORT_PLUGIN(qjpeg) //这个
Q_IMPORT_PLUGIN(qgif) //这个
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
…
return app.exec();
}
在.pro里加入:
QTPLUGIN += qjpeg qgif
CONFIG += static
QT的帮助里就做到这里,但我编译程序时出错如下:
release/main.o(.text+0×1c9):main.cpp:
undefined reference to `qt_plugin_instance_qgif()’
undefined reference to `qt_plugin_instance_qjpeg()’
4 加入LIBS
在.pro中加入:
LIBS += C:/Qt/4.3.3/plugins/imageformats/libqgif.a
LIBS += C:/Qt/4.3.3/plugins/imageformats/libqjpeg.a
如果QT静态编译正确的话,你应该上面这个目录下看到这两个文件libqgif.a和libqjpeg.a (据说以前的QT版本也可能是.lib或.o文件)
5 解决MinGW的mingwm10.dll依赖问题
LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -static -Wl,-s -Wl -mthreads -Wl, -subsystem,windows
quote:
一般只有用到threads的时候才用到mingwm10.dll,我们通常遇到的”缺少mingwm10.dll”问题,可以在程序qmake生成makefile.release文件后删除”-mthreads”参数即可,一般在 “LFLAGS”后面。当然,这只是临时解决方案,每次都要手动修改,也可以在编译QT前先修改qmake.h,不过不推荐这种方法。其实, mingwm10.dll也就十多K,每次发布程序时一起打包也无所谓。
这时编译同样得到一个非常大的可执行程序(我写的这个贪吃蛇一共500多行,生成的exe有8M)。用AspPack压缩一下。就可以发给用户了(这时是2.6M)。
quote: “这样编译出来的程序比较大,可以先用strip命令去掉程序里面一些无用信息后,用ASPack或者UPX之类的压缩加壳软件压缩一下,两者的压缩率基本都达到30%多一点,压缩效果还是很明显的。”
第二种:动态编译就很容易了。
用QT的默认安装,把生成的release下的exe文件,和下面几个核心文件放在一个文件夹里:
MINGWM10.DLL
QTGUI4.DLL
QTCORE4.DLL
VC2005编译程序运行时需要的几个dll文件
Microsoft.VC80.CRT.manifest 位于x:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\\Microsoft.VC80.CRT
msvcm80.dll
msvcp80.dll
msvcr80.dll
QtCore4.dll
QtGui4.dll
这样就可以运行了。但图片文件还是可能显示不出来,解决办法:
把程序文件夹里,建立一个imageformats目录(必须是这个名字),把qt目录下的plugin/imageformats目录下对应的dll文件copy过去。这样动态连接就完成了。
发布中文Qt程序时要注意的问题:
用Qt写好了程序,并撰写了中文的语言文件(.qm文件) 后,发布到没有安装过Qt的系统上时,却发现只有固定的界面文字中的中文能正常显示,而程序运行过程中保存到诸如txt、xml文件中的中文却变成了奇怪的编码,而读回时就会变成“?”。
解决方法很简单,有多种方法:
1)将以上的中文编码库文件安装到可执行程序的目录下的 codecs 目录下,程序启动时,QtCore中的初始化过程会自动找到该目录并加载到内存中。
2)在Qt程序启动时,用代码指定Qt的Library搜索路径。
3)编写qt.config文件,放在可执行文件的目录下,并在其中定义Codecs的路径。
4)对于用static编译的Qt,在主程序文件中写上这句宏指令:Q_IMPORT_PLUGIN(qcncodecs),并在Link中加入相应的LIB文件。
具体内容我不多说了,看Qt文档吧: doc/html/plugins-howto.html
QT程序在windows下部署发布相关推荐
- Qt 程序在 Windows 下的发布
「博客搬家」 原地址: CSDN 原发表时间: 2016-06-04 本文讨论在 Windows 平台下编译成功的 Qt 程序,如何在未配置 Qt 开发环境的 Windows 平台下独立运行的方法. ...
- wince程序转Linux,Qt在程序WinCE5.0下部署时“XXX不是有效的Windows CE应用程序”
文章参看这里.这个一般是由于我们编译的Qt使用了WinCE CoreDll.dll中不存在的API导致的 我们需要使用一个工具qtverify.zip 具体下载目录在 /2012年资料/8月/14日/ ...
- 【Jenkins】用Jenkins在windows下部署.net项目
[Jenkins]用Jenkins在windows下部署.net项目 1.安装Jenkins+java+MSBuild+nuget(略) 2.新建一个任务 3.增加构建步骤[还原项目包](Execut ...
- Windows下部署ubuntu16.04+anaconda2.7+tensorflow
Windows下部署虚拟机VM+ubuntu16.04+anaconda2.7+tensorflow 安装VMware 在虚拟机中新建Linux开发环境 在ubuntu中下载anconda 下载ten ...
- Windows下部署Swagger Edit、Swagger UI
Windows下部署Swagger Edit.Swagger UI 一.环境需求--已安装node环境 二.准备Swagger Editor.Swagger UI源码 三.搭建Swagger Edit ...
- 基于Qt Creator 的Windows下数字图像处理软件[栏目]
基于Qt Creator 的Windows下数字图像处理软件[栏目] 前言 设计过程 完整项目展示 前言 之前说准备转行软件开发,准备从C++的学习开始,恰好这学期的数字图像处理需要做一个项目,所以决 ...
- installshield打包mysql_实现Installshield对Php+mysql+apache做的程序在WINDOWS下打包
实现Installshield对Php+mysql+apache做的程序在WINDOWS下打包 undefined undefined用Installshield对Php+mysql+apache做的 ...
- installshield mysql_实现Installshield对Php+mysql+apache做的程序在WINDOWS下打包
实现Installshield对Php+mysql+apache做的程序在WINDOWS下打包 上一篇 / 下一篇 2007-09-30 09:39:59 / 个人分类:For Test 实现Ins ...
- Qt学习之Windows下Qt应用程序打包成exe安装包
本文介绍如何将exe可执行程序打包成exe安装包,打包完的安装包可以直接在Windows下安装,需要用到 Inno Setup 安装程序制作软件工具,工具下载完之后直接安装即可. 工具下载: 打包安装 ...
最新文章
- ollections 库中常用的 4 个数据结构
- 使用JSTL报错:items does not support runtime expre...
- 软件稳定性测试的测试点
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波1 - 灰度变换和空间滤波基础、Sigmoid激活函数
- 计算器百分号如何用代码实现_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?...
- (035) Linux之其他命令
- 《强化学习》中的第13章:策略梯度方法
- Android-Binder机制
- xLua(一)——介绍
- IDEA如何新建一个source folder
- IJCAI 2022杰出论文公布,大陆作者中稿298篇拿下两项第一
- ABAQUS橡胶大变形分析不收敛解决办法_51CAE_新浪博客
- matlab在光子晶体,利用平面波展开法在matlab中计算一维光子晶体的带隙结构
- Qt-QCustomPlot
- 结对项目-最长英语单词链
- Beyond Compare下载安装
- 2021计算机专业分数线,计算机专业好的大学排名及录取分数线(2021参考)
- 中断处理优先级与中断相应次序
- 一文搞清楚软链接和硬链接
- ES GEO地理空间查询java版
热门文章
- (一)STL体系结构基础介绍
- Object-C-NSFileManager
- TFS环境搭建--添加新用户
- 对软件测试“核心价值”的思考
- 安全测试需要考虑的测试点
- JSP Cookie 处理
- 在字符串中找出第一个只出现一次的字符
- oracle异步sql,Linux上Oracle是否使用异步io的诊断
- django1.11使用mysql_django 1.11.1 连接MySQL
- android 判断fragment类型,Android 判断当前Fragment是否可见(Visible)