Building Qt as a Shared Library

  因为:QT基本上都是采用动态编译的(被安装的OS中的),(如安装包往往都是默认动态编译处理好的动态库),所以我们采用动态连接的方式进行发布应用。

  如果采用静态的方式发布,则需要重新通过对QT的源码进行“静态编译”后形成lib,或者obj的形式。然后安装在开发的系统中。

《1》采用QTCreater继承开发环境编译,以及发布处理。

  总体来说非常方便,

  (1)选择器以Debug或者Release形式构建

  (2)先编译通过,完成bug修复

  (3)然后构建成功,发布响应的版本

  注意:根据缺少的dll,与exe一同打包处理,其次,需要根据QT安装目录中的plugins插件,添加响应的插件。

  说明:

  QT应用总的各种资源,图片等,都已经被编译仅exe可执行文件中。所以不需要对此类文件打包处理。

《2》采用命令行的形式发布

(1)进入当前目录位置,执行以下命令,

  qmake -config release

  nmake

  

发布应用:把要部署的应用环境中:

  (1)与QT相关的DLL(项目总用到的)

  (2)系统OS平台相关的插件,如Qwindows.dll

  (3)QTPulgins部分的,QT需要寻找借助这些文件,处理。

1.  ICU DLLs :QT需要使用ICU库来进行UNICODE编码支持,要与版本保持一致。

2. 如果使用了QtWebEngine, 需要 <Qt install path>/bin/QtWebEngineProcess.exe放在应用相同的位置。 If you chose to deploy the binary to a different path, set the QTWEBENGINEPROCESS_PATH environment variable to the binary's absolute path (including its file name).因为QT在开发WebKit应用时,需要通过在安装的时候,通过此环境变量直接执行:此插件 QtWebEngineProcess.exe,这样可以更有效率,体验更好。

3. 如果支持HTML5视频, 需要 ffmpegsumo.dll (WebM codec plugin网络视频编解码插件) 放在exe应用当先目录的子目录qtwebengine文件夹下面,或者 or under the path that the PluginsPath variable was set to in <Qt install path>/<Qt version>/msvc2013/qt.conf.qt.conf是Qt库的配置文件,其中应该有变量:PluginsPath配置。

4. 如果项目应用需要依赖“当前编译器”中的执行库,则同样这些库需要随应用一同发布。包括直接依赖的库,以及“间接插件”间接依赖的库。

可以采用depends tool工具查看Qt依赖的库有哪些。

  把执行文件exe以及所有依赖的dll共同放置在一起。确保部署环境没有QT安装的文件,以及QT的环境变量没有QT。如果应用可以正常运行,则至此应该可以部署成功。但是,如果QT的项目中需要依赖的QT插件,则如果没有插件依赖的DLL,则相应的功能不能正常使用。

QtWebEngine引擎支持依赖的“文件”:

QT库中的qt.conf配置文件

QT提供的依赖查询工具 Dependency Walker Tool (QT提供) 

  (1)查看应用XXXX.exe依赖的数据包,如下图。

  

  (2)查询项目中qT采用的插件所依赖的dll

  Qt 插件的处理方式与正常的DLL不同,不能简单的把插件plugs dll拷贝到与exe相同的位置。QT中插件的应用会寻找exe当前目录的目录“plugins”,在这个子目录中寻找相应的插件文件库等

  所以,如果确保我们的exe应用完全正常运行,需要在当前exe目录下新建子目录“plugins”,然后把插件的dll拷贝进去。

  整个exe当前的文件应该如下形式:

  

插件问题的说明:

(1) the Qt Platform Abstraction (QPA) layer,QT5中的QT抽象平台层,QTGUI应用需要在特定的子目录下默认platform,下面配置   qwindows.dll.
(2)QT可能需要多种插件支持:打印插件, JPEG图像格式插件, SQL驱动插件爱你等。一定要把响应的插件与应用一同发布。这些插件往往也需要配置特定的目录中。 printsupportimageformats or sqldrivers

  如果需要采用WEbKit开发网页视图,则需要包含l text codec plugins来支持网页的多种编码 的解析。

  这些插件都是通过“硬编码”(默认)进了QTCore库中。默认,QT安装目录下的“plugin”目录是其搜索目录。这样的弊端,要求目的部署环境PC需要和QT安装的目录一样,这样才能找到使用的插件文件。通过以下方式来做应用开发的插件问题支持:

  • Using qt.conf. This approach is the recommended if you have executables in different places sharing the same plugins.
  • Using QApplication::addLibraryPath() or QApplication::setLibraryPaths(). This approach is recommended if you only have one executable that will use the plugin.
  • Using a third party installation utility to change the hard-coded paths in the QtCore library.
    •   

   using QApplication::addLibraryPath ,则 qApp->libraryPaths().返回相同的顺序the same order as the QStringList  先添加的会被QT首先寻找。如果使用qApp->setLibraryPaths(),则这样可以决定被寻找的顺序。

  

 这些插件都可以直接在QT安装目录下的插件文件目录中拷贝:

  如果还需要执行编译器特定动态库(依赖于响应的开发VS版本):

  

  如果项目中需要ICU支持,则需要包含特定的如下库

  

  如果需要ANGLE支持,则需要包含如下库

  

  综上:

    按照上述的顺序,将项目应用exe,以及所有相关的文件以响应的配置目录方式处理。则可以确保你的应用在(1)没有QT库,(2)没有编译器安装 的部署环境下运行正常运行!!!

其他说明:

 (1)对于插件需要特殊的子目录配置,则可以替代的方案;
  在可以在项目应用的main函数中,便捷的通过以下方式,在QApplication对象创建之前,把响应的目录添加进QT的应用中,这样当QT项目中在执行寻找插件时:首先在应用中的路劲寻找,然后在特定的插件默认位置寻找。 using QApplication::addLibraryPath() or QApplication::setLibraryPaths().

  qApp->addLibraryPath("C:\some\other\path");

  通过这种方式,所有任意位置的插件都可以被包含。在最终部署时也可以将插件dll与其他一般dll放置在一起,方便管理配置。

《3》当QT项目采用VS2010等IDE开发部署情况

  需要做的额外操作:

(1)如果VisualC++库需要准备的配置编译器版本以及相关的C运行时库版本,这样可以避免因为C运行时库不同而报的异常。

  参考http://www.cnblogs.com/icmzn/p/5935361.html

end;

转载于:https://www.cnblogs.com/icmzn/p/5935359.html

QT--以共享的方式发布应用,QT依赖库相关推荐

  1. Linux qt 更新,Qt 5.15 Beta 2 发布,Qt 6之前的最后一个重大更新

    即将发布的Qt 5.15工具包的第二个beta版现已可供测试. Qt 5.15是Qt 6.0之前的最后一个重大更新,而且有望在11月左右发布.图形方面的Qt 5.15一直致力于改进Qt 3D轮廓分析, ...

  2. Qt实用技巧:ubuntu发布程序打包流程(解决插件xcb加载失败)

    若该文为原创文章,未经允许不得转载 原博主博客地址:长沙红胖子Qt的博客_CSDN博客-Qt开发,图形图像处理,OpenCV图像处理领域博主 原博主博客导航:红胖子网络科技博文大全:开发技术集合(包含 ...

  3. qt-项目部署(某些情况下编译器中运行异常的话可以使用命令windeployqt 程序名在安装的qt dos命令下补全部分依赖库在运行项目或发布)

    一般qt项目启动不起来大部分都是因为依赖库要么缺失要么位数不对(有时候缺失的dll不会提示出来),建议检查设置计算机环境变量,项目编译设置路径等,然后再使用dos命令windeployqt添加qt依赖 ...

  4. ubuntu qt编译mysql报错_[Linux]QT编译Mysql驱动(Mariadb驱动),解决qmake报错问题

    编译环境 系统:Ubuntu18.04 QT版本:Qt 5.14.0 gcc版本:gcc version 7.5.0 qt官方编译驱动方式 在使用QT连接数据库时遇见的第一个错误就是QMYSQL dr ...

  5. QT实现共享内存进行进程间通信

    QT实现共享内存进行进程间通信 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 演示使用带有QSharedMemory类的共享内存进行进程间通信. 共享内存示例显示了 ...

  6. QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64)

    QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64) 1.编译方式介绍: 2.动态编译方式打包发布QT程序: 方法一:手动复制 方法二:使用工具 问题& ...

  7. QT学习笔记(二):QT MinGW 和 MSVC 编译方式

    QT学习笔记(二):QT MinGW 和 MSVC 编译方式 Qt 中有两种方式编译:一种是MinGW ,另一种MSVC,是使用两种不同的编译器. 1.MSVC是指微软的VC编译器: 2.MingGW ...

  8. qt5 linux 窗口不能置顶_Qt 5.15 LTS发布,Qt 6要来了

    Qt 5.15 LTS 已经发布了,这是 Qt 5 系列的最后一个功能版本,为下一个主要版本 Qt 6 做了大量准备工作.此版本将为所有商业许可证持有者提供三年的长期支持,在三年的支持期后,可以选择提 ...

  9. Qt 5.14 稳定版发布,带来更好的 HiDPI 支持和改进 3D 模块

    计划于上个月发布的 Qt 5.14 经过短暂的推迟后,现在终于发布了稳定版.该版本以及明年的 Qt 5.15 LTS 开始为发布 Qt 6 做铺垫.开发团队表示,尽管他们正在努力通过标记不推荐使用的功 ...

最新文章

  1. 麻省理工牛人解说数学体系
  2. C# 用tabcontrol实现窗体类似网页排版的显示
  3. android SDK Manager 代理服务器设置
  4. OpenGl 绘制一个立方体
  5. 构建一套高逼格 Nginx 集群监控系统!
  6. docker任务调度工具: ofelia
  7. 修改Docker镜像的默认存储位置
  8. 修改Flume-NG的hdfs sink解析时间戳源码大幅提高写入性能
  9. mysql 数据库编码怎么看_mysql查看数据库编码
  10. Oracle数据备份与恢复
  11. CSDN使用Markdown编辑器
  12. 想找Java项目练手,却不知道从哪找?
  13. APS系统的实施步骤,外行人都能看懂
  14. 数据分析应该怎么做?
  15. 秒懂设计模式之责任链模式(Chain Of Responsibility Pattern)
  16. Qt在Win下调用系统的软键盘,区分win7\win8\win10
  17. img显示保存在服务器中的图片,img显示服务器图片不显示
  18. 单片机c语言波特率检测,基于MSP430系列微控制器串口通信时的波特率自动检测的实现...
  19. P02014145 杨志豪 信息论作业
  20. 华为面试题c/c++

热门文章

  1. 暴力破解(一)——python脚本暴力破解 加密的zip压缩文件
  2. 自动出报表,零代码做驾驶舱,我找到了Excel的顶级替代
  3. 报表性能优化方案之单数据集分页SQL实现层式报表
  4. java web ssh jar_java web 汽车美容管理系统 ssh 毕设作品
  5. 安装centos7的电脑对比视频播放
  6. linux脚本猜数字游戏,101个shell脚本 猜数字游戏代码
  7. js判断是否支持webgl_基于WebGL无插件虚拟场景漫游关键技术(完全版)ThingJS
  8. web css圆弧波浪线,web前端入门到实战:css实现波浪线及立方体
  9. 递归实例以及应用包含形参辨析
  10. java定时器注解加效验_Java中定时器的使用之二(springboot–@Scheduled注解)