Qt程序打包发布——动态发布
来源:互联网 发布:网络信号转换器 编辑:程序博客网 时间:2024/05/21 17:23
最近由于工作需要,涉及到了Qt打包发布方面知识。以前对于打包的理解,仅仅是一个模糊的概念,经过此次的实践与苦苦摸索,终于有一个明确的概念。言归正传,下面通过这两天的经历来介绍发布过程。
首先,明确打包发布的目的。在开发完成一个app之后,不可能要求客户像开发人员一样把整个开发环境都安装上,所以,为了能够让客户最快、最简洁地使用,就需要开发人员提供一个最小、操作最简单的包。
在清楚目的之后,还需要了解Qt发布的方式(当然,几乎所有的app都通过两种方式发布):静态编译、动态发布方式。这里采用的是动态发布,也就是同时发布依赖动态库(linux下的.so,win下的.dll文件)。
在这里介绍下操作的环境:Centos7、Qt5.5.1,
接着,参考官方文档(http://doc.qt.io/qt-5/linux-deployment.html)可知,发布app需要拷贝可执行程序、Qt依赖库以及平台插件到同一个可执行程序包中;下面一步一步来:
1. 打包release版本——使用Qt Creater,选择release方式构建(这里需要知道Qt构建的目录,如果不清楚,可以点击选项->构建目录选择查看);
2. 将重新构建的release版本可执行文件拷贝到要发布的包中(这里选择的是release_packet);
3. 拷贝Qt依赖库——使用ldd命令查看可执行程序依赖的Qt库,然后拷贝进去可执行程序包中;如果不想手动拷贝,这里提供一个脚本:
#!/bin/sh
exe="NvNetCutStreamingServer" #发布的程序名称
des="./" #你的路径
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
4. 拷贝Qt平台插件——到Qt安装目录下将plugin下的platforms插件(我的Qt插件目录是/opt/apps/Qt5.5.1/Tools/QtCreator/bin/plugins/platforms/)拷贝进去。
5. 结合官方文档,新建一个与可执行程序同名的.sh脚本,内容如下:
#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname "$@"
到测试机器上运行5中新建脚本,原以为大功告成了,结果出现了下面的错误:
This application failed to start because it could not find or load the Qt platform plugin "xcb".
Available platform plugins are: linuxfb, minimal, offscreen, xcb.
Reinstalling the application may fix this problem.
Aborted (core dumped)
在经过一番查找后,特别是参考了http://blog.csdn.net/braveyly/article/details/14005191的博客之后,我清楚了错误原因是缺少xcb依赖的库,用ldd一验证,果然是一部分依赖库没有找到,然后到开发环境上将这些库拷贝进去,最后运行程序,大功告成!
新人总结,文中如有不当之处,请各位大侠不吝指出。
- Qt程序打包发布——动态发布
- Qt程序打包发布——插件发布
- 打包发布qt程序
- QT程序打包发布
- QT程序打包发布
- Qt 程序打包发布
- Qt程序打包发布
- QT程序发布打包
- Qt程序打包发布
- Qt程序打包发布
- Qt程序打包发布
- Qt程序打包发布
- QT程序打包发布
- NSIS打包发布Qt程序
- Qt 程序打包发布总结
- Qt 程序打包发布总结
- Qt打包程序并发布
- Qt 程序打包发布总结
- 噩梦射手(SurvivalShooter)教程(三)
- Android IPC之序列化
- JVM底层如何实现synchronized
- jQuery动画
- Android|Smaller apk
- Qt程序打包发布——动态发布
- 完全拷贝的一份,程序员阅读书单
- 详解大端模式和小端模式
- android studio 之Gradle基本配置
- 文本溢出边界显示为省略号
- Disruptor(无锁并发框架)-发布
- Windbg调试命令详解
- 运用递归函数来转化进制
- Fastlane的黑魔法:一键打包编译上传 AppStore