| 查看: 1174 | 回复: 4 | ||||
yalefield金虫 (文坛精英)
老汉一枚
|
[交流]
【转帖】如何发布在Windows下开发的QT程序已有3人参与
|
|
老汉按:程序编好了,换一台机器就不能执行。问题就在于程序还需要库文件的支持。 http://hi.baidu.com/jzinfo/blog/item/c17c3f6d4ff439fe431694c3.html 发布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等图片的支持都是以插件的形式存在的,现在我们还没有包含任何插件。 3 加入插件 在main.cpp里: 在.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文件) 这时已经可以正常编译运行了。但还是需要mingwm10.dll才能运行。 5. 解决MinGW的mingwm10.dll依赖问题 在Makefile.release里找到: 删除其中的”-mthreads” 一般只有用到threads的时候才用到mingwm10.dll,我们通常遇到的”缺少mingwm10.dll”问题,可以在程序qmake生成 makefile.release文件后删除”-mthreads”参数即可,一般在 “LFLAGS”后面。当然,这只是临时解决方案,每次都要手动修改,也可以在编译QT前先修改qmake.h,不过不推荐这种方法。其实, mingwm10.dll也就十多K,每次发布程序时一起打包也无所谓。 更多信息可以参考: http://lists.trolltech.com/qt-interest/2006-08/thread00942-0.html http://lists.trolltech.com/qt-interest/2005-10/thread00381-0.html#msg00553 这时编译,同样得到一个非常大的可执行程序(我写的这个贪吃蛇一共500多行,生成的exe有8M)。用AspPack压缩一下。就可以发给用户了(这时是2.6M)。 这样编译出来的程序比较大,可以先用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过去。这样动态连接就完成了。 注:可以用微软的Dependency Walker tool工具,就是一个depends.exe的程序,来查看一个exe文件跟哪些dll关联。 注:应该在完全没有装QT的系统上,测试所要发布的程序有没有DLL依赖问题。 [ Last edited by yalefield on 2011-1-31 at 13:25 ] |
» 收录本帖的淘帖专辑推荐
准备下载吧! |
» 猜你喜欢
请问哪里可以有青B申请的本子可以借鉴一下。
已经有4人回复
真诚求助:手里的省社科项目结项要求主持人一篇中文核心,有什么渠道能发核心吗
已经有6人回复
孩子确诊有中度注意力缺陷
已经有14人回复
三甲基碘化亚砜的氧化反应
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
» 本主题相关价值贴推荐,对您同样有帮助:
Windows下的免费C/C++编译环境下载
已经有40人回复
【分享】Windows 8 发布了,可以免费下载【已搜索无重复】
已经有8人回复
请教Windows系统下perl脚本的ARGV应用问题,谢谢
已经有5人回复
【求助】哪种语言更适合图像处理软件开发?
已经有28人回复
【转帖】MFC与Qt混合编程---“官方文档”的缩写
已经有8人回复
【求助】windows下intel MKL的安装和使用
已经有3人回复
【求助】求助,如何使linux能运行windows dos 的程序!
已经有5人回复
【原创】Windows7或Vista下纳米盘使用问题解决方法集锦
已经有10人回复
zhouyadan2
银虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 330.6
- 散金: 9
- 沙发: 2
- 帖子: 136
- 在线: 20.4小时
- 虫号: 1217449
- 注册: 2011-03-01
- 性别: MM
- 专业: 有机合成

2楼2011-03-21 16:02:55
holmescn
金虫 (正式写手)
- 程序强帖: 37
- 应助: 1 (幼儿园)
- 金币: 1918.8
- 散金: 275
- 红花: 1
- 帖子: 699
- 在线: 102.6小时
- 虫号: 913482
- 注册: 2009-11-26
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
3楼2011-03-22 09:34:15
yalefield
金虫 (文坛精英)
老汉一枚
- 程序强帖: 3
- 应助: 129 (高中生)
- 贵宾: 0.17
- 金币: 21238.9
- 散金: 3440
- 红花: 66
- 帖子: 12101
- 在线: 759.1小时
- 虫号: 96063
- 注册: 2005-10-07
- 专业: 高等教育学
- 管辖: 计算模拟
4楼2011-03-22 11:14:46
holmescn
金虫 (正式写手)
- 程序强帖: 37
- 应助: 1 (幼儿园)
- 金币: 1918.8
- 散金: 275
- 红花: 1
- 帖子: 699
- 在线: 102.6小时
- 虫号: 913482
- 注册: 2009-11-26
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
5楼2011-03-22 18:43:34













回复此楼