原文请看: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应用如何发布的更多相关文章

  1. Qt 程序打包发布总结

    1.  概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装 ...

  2. Qt 静态编译发布和动态编译发布

    静态编译发布 你写了一个小型Qt程序,发布的时候不想要一大堆dll文件,就只想打包成一个exe文件,那么就需要用到静态编译. 下面的教程就是Qt静态编译环境配置 Qt5.6静态编译包下载地址 1.下载 ...

  3. Qt开发北斗定位系统融合百度地图API及Qt程序打包发布

    Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1.上位机介绍 最近有个接了一个小型项目,内容很简单,就是解析北斗GPS的串口数据然后输出经纬度,但接过来觉得太简单,就发挥了主观能动性,增加 ...

  4. Qt程序打包发布方法(使用官方提供的windeployqt工具)

    Qt程序打包发布方法(使用官方提供的windeployqt工具) 转自:http://tieba.baidu.com/p/3730103947?qq-pf-to=pcqq.group Qt 官方开发环 ...

  5. Qt项目的发布

    Qt项目的发布 (1)首先将项目调为发布版 (2)找到缺失的DLL文件 发布好了后,双击生成的exe文件可能会出现如下的问题 像这样的错误警告可能会弹出好几个,对于这种错误有2种解决方案. 第一种:配 ...

  6. Qt 程序打包发布

    Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,Qt 官方开发环境里自带了一个工具:windeployqt.exe.在Qt安装目录如:C:\Qt\Qt5.7. ...

  7. Qt Sqlite qwt 发布过程中碰到的问题runtime error

    qt版本:4.8.0 qwt版本:6.1.2 使用dll show检测缺少的dll,或者笨一点的方法,点击运行差什么找什么放进去: 左上显示exe调用哪些dll,右边是dll又再次调用啦哪些dll: ...

  8. Qt之打包发布(NSIS详解)

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101fer8.html 发布方式    Qt发布的时候,通常使用两种方式:   (1)静态编译  (2)动态编译 ...

  9. QT程序打包发布

    本来感觉这是一个简单的操作,今天看见群里有人在问这个问题,他说网上查了很多都不成功,突然就想把自己初学的时候记录一下! 题目谢了QT程序的打包发布,那就是两步骤:打包+发布! 注释:这篇博文用的是Qt ...

  10. Qt软件打包发布(QT5.4.1(msvc2013_64_opengl),Win7 64bit)

    环境:QT5.4.1(msvc2013_64_opengl),Win7 64bit 编译方式 Qt开发的程序发布的时候经常采用两种方式:1)静态编译,可生成单一的可执行文件:2)动态编译,需同时附上需 ...

随机推荐

  1. Bigbluebutton服务执行过程及相关配置文件

    BigBlueButton服务列表 BigBlueButton由许多开源的服务组成,看似很麻烦,实际上拆分开每一个服务就很简单了,组件化平台化.究竟BBB都用到了哪些开源服务?我们来列举一下,名称均带 ...

  2. Linux powercli 以及connect-viserver 连接问题

    1. 参考文档 http://fdo-workspace.blogspot.hk/2017/07/powershell-powercli-for-linux-server.html 2. powers ...

  3. Druid连接池及监控在spring中的配置

    Druid连接池及监控在spring配置如下: <bean id="dataSource" class="com.alibaba.druid.pool.DruidD ...

  4. 【BZOJ】1500: [NOI2005]维修数列

    [算法]splay [题解]数据结构 感谢Occult的模板>_<:HYSBZ 1500 维修数列 #include<cstdio> #include<cctype> ...

  5. CSS 竖线颜色渐变

    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...

  6. VMware Workstation Pro 14 序列号

    VMware Workstation Pro 14 序列号: AA702-81D8N-0817Y-75PQT-Q70A4 YC592-8VF55-M81AZ-FWW5T-WVRV0 FC78K-FKE ...

  7. Python自动化运维 - Django(二)Ajax基础 - 自定义分页

    Ajax基础 AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下. 什么是Ajax AJAX = 异步 Java ...

  8. 【swupdate文档 一】嵌入式系统的软件管理

    嵌入式系统的软件管理 嵌入式系统变得越来越复杂, 它们的软件也反映了这种复杂性的增加. 为了支持新的特性和修复,很有必要让嵌入式系统上的软件 能够以绝对可靠的方式更新. 在基于linux的系统上,我们 ...

  9. skb管理函数之alloc_skb、dev_alloc_skb、kfree_skb、dev_kfree_skb、consume_skb

    alloc_skb--分配skb dev_alloc_skb--分配skb,通常被设备驱动用在中断上下文中,它是alloc_skb的封装函数,因为在中断处理函数中被调用,因此要求原子操作(GFP_AT ...

  10. 爬虫===登陆CSDN的方法

    本文主要介绍csdn的登陆,可应用在爬虫上~ # -*- coding:utf-8 -*- import json import requestsfrom xlutils.copy import co ...