Qt应用如何发布
原文请看:http://www.cnblogs.com/ungshow/archive/2010/10/10/1847082.html
通常情况下,使用Qt开发应用都是采用动态编译的方式来进行发布,发布应用的时候就需要将相应的动态链接库文件一起发布了。应用依赖于哪些dll 文 件呢?一般来讲,有QtCore4.dll、QtGUI4.dll之类的了。但是,由于应用可能涉及到其它的模块,如网络模块等。可以查看一个.pro文 件了解应用具体涉及到哪些模块。还有一个办法是,如果安装了VC6,则可以使用depends命令打开一个依赖查看工具,直接打开你的exe文件便可看到 它所依赖的dll文件。复制出来即可,放在exe文件所在的目录即可。
另外还有一部分,是插件,这些插件是depends工具显示不出来的依赖关系,因为只有在应用运行的时候才会动态地去加载。这也是为什么很多跟我一样的新手会遇到“找不到数据库驱动”,“乱码”等问题的原因。
在 Qt的安装目录中有一个plugins的目录,这个目录放着一些常用的插件,有数据库驱动、文字编码插件、图像解析等方面的,也基本上一个完整应 用所必需的——因为你总会在应用中使用数据库,中文,使用图片等(尽管不是一定有这些操作)。发布应用时,你需要把你使用到的插件带上,你会把 plugins目录下的一些dll文件直接复制出来,与exe文件放在一起,或者在再新建一个plugins目录用于放置插件文件。在应用中使用 QApplication::addLibraryPath(“./”)或者QApplication::addLibraryPath(“. /plugins”)。但还是解决不了找不到插件的问题。
根据官方的说明:
假设你的应用app.exe位于appdir目录,如下:
+appdir
-app.exe
那么,appdir目录其实就等同于plugins目录。也就是说,当你应用运行的时候,它会在appdir目录下面找qt的插件。但是,Qt的插件是按不同的目录放置的,当你从Qt的安装文件目录下复制插件时,还需要创建相应的目录结构。如下,使用数据库插件:
+appdir
-app.exe
+sqldrivers
-qsqlite4.dll
现在即便不使用QApplication::addLibraryPath(“./”),也可以找到数据库驱动了。
或者使用QApplication::addLibraryPath(“./plugins”),将目录结构建成如下的样子,也是可以的:
+appdir
-app.exe
+plugins
+sqldrivers
-qsqlite4.dll
这样也是正常运行的。重要的,其实是只有一点。使用qt的插件时,要注意带上相应的目录。如果有一点Qt插件开发的经验的话,理解起来就比较方便吧。
还
有需要提醒的一点,就是图片、文字编码的插件。使用起来和上面的例子一样,只是容易被忽略掉。等到发布应用后,发现乱码了,或者是按钮上的图片显
示不了等问题是,就应该想到这一点。开发的时候一切正常,在没有Qt环境的机器上测试的时候,怎么就都不正常了呢?八成就是少了这些插件。
另外,在Windows环境上开发,可以使用SysinternalsSuite工
具来查看应用在运行时具体依赖了哪些dll文件。它是微软提供的一套开发小工具集合。其中的process
explorer工具可以查看系统进程并显示出这个进程使用到的dll以及dll所在的目录。当应用加载不了dll,或者加载了错误的dll时,用它就更
加方便了。
——————————————————————————–
以上内容都是一些小常识,也许大家早就明了了。可惜我这个新手在上面还是吃过大亏,希望对遇到类似问题的朋友有一定的帮助。
我的博文:http://blog.romebuilder.com/?p=93
Qt应用如何发布的更多相关文章
- Qt 程序打包发布总结
1. 概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装 ...
- Qt 静态编译发布和动态编译发布
静态编译发布 你写了一个小型Qt程序,发布的时候不想要一大堆dll文件,就只想打包成一个exe文件,那么就需要用到静态编译. 下面的教程就是Qt静态编译环境配置 Qt5.6静态编译包下载地址 1.下载 ...
- Qt开发北斗定位系统融合百度地图API及Qt程序打包发布
Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1.上位机介绍 最近有个接了一个小型项目,内容很简单,就是解析北斗GPS的串口数据然后输出经纬度,但接过来觉得太简单,就发挥了主观能动性,增加 ...
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
Qt程序打包发布方法(使用官方提供的windeployqt工具) 转自:http://tieba.baidu.com/p/3730103947?qq-pf-to=pcqq.group Qt 官方开发环 ...
- Qt项目的发布
Qt项目的发布 (1)首先将项目调为发布版 (2)找到缺失的DLL文件 发布好了后,双击生成的exe文件可能会出现如下的问题 像这样的错误警告可能会弹出好几个,对于这种错误有2种解决方案. 第一种:配 ...
- Qt 程序打包发布
Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,Qt 官方开发环境里自带了一个工具:windeployqt.exe.在Qt安装目录如:C:\Qt\Qt5.7. ...
- Qt Sqlite qwt 发布过程中碰到的问题runtime error
qt版本:4.8.0 qwt版本:6.1.2 使用dll show检测缺少的dll,或者笨一点的方法,点击运行差什么找什么放进去: 左上显示exe调用哪些dll,右边是dll又再次调用啦哪些dll: ...
- Qt之打包发布(NSIS详解)
来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101fer8.html 发布方式 Qt发布的时候,通常使用两种方式: (1)静态编译 (2)动态编译 ...
- QT程序打包发布
本来感觉这是一个简单的操作,今天看见群里有人在问这个问题,他说网上查了很多都不成功,突然就想把自己初学的时候记录一下! 题目谢了QT程序的打包发布,那就是两步骤:打包+发布! 注释:这篇博文用的是Qt ...
- Qt软件打包发布(QT5.4.1(msvc2013_64_opengl),Win7 64bit)
环境:QT5.4.1(msvc2013_64_opengl),Win7 64bit 编译方式 Qt开发的程序发布的时候经常采用两种方式:1)静态编译,可生成单一的可执行文件:2)动态编译,需同时附上需 ...
随机推荐
- ASP.NET创建三层架构图解详细教程
1.新建项目 2.创建Visual Studio解决方案 3.再创建项目 4.选择类库类型 5.依次创建bll(业务逻辑层),dal(数据访问层)和model(模型层也可以叫实体层) 6.添加一个网站 ...
- CMDB资产管理系统开发【day26】:CMDB上节回顾
一.上节知识点回顾 服务器设计了一个表结构 开发了一个客户端 二.后台创建缓存区表 客户端连接服务器,在服务器的下面看报错信息 因为URL都没有写,所以我找不到呀 1.在MadKing\url.py ...
- Android中禁止SlidingPaneLayout的侧滑功能
Android中使用android.support.v4.widget.SlidingPaneLayout实现侧滑功能的时候,可能出现滑动屏幕时与SlidingPaneLayout的侧滑发生冲突,查看 ...
- [洛谷P2597] [ZJOI2012]灾难
洛谷题目链接:[ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引 ...
- Linux查看进程的所有子进程和线程
得到进程的pid: ps -ef | grep process_name | grep -v "grep" | awk '{print $2}' 查看进程的所有线程 # ps mp ...
- 【BZOJ4816】【SDOI2017】数字表格 [莫比乌斯反演]
数字表格 Time Limit: 50 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Doris刚刚学习了fibonac ...
- 51Nod 1228 序列求和
T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n).给出n和k,求S(n). 例如k = 2,n = 5,S(n) = 1^2 + 2^2 + 3^2 + 4^ ...
- bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列——map+hash+转换
Description N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色, 每头牛有多种特色,用二进制01表示它的特色ID.比如特色ID为13(1101), ...
- 理解js中私有变量
私有变量在js中是个什么概念.当下我的认识是var所定义的变量,实际可以理解为属性和方法,或者单单是临时存储器,不归属任何对象. 一个声明函数: function a(){ var v = &quo ...
- this的九种常用场景(转子jb51.net)
[场景1]全局环境中的this指向全局对象 ; alert(a); b = ; alert( ; [场景2]对象内部函数的this指向调用函数的当前对象 ; var bar = { a: , test ...