Qt应用程序在windows和Linux操作系统下的打包发布(超详细,超清晰全面,图文并茂) |
您所在的位置:网站首页 › 篮球小说主角得到一个打包系统 › Qt应用程序在windows和Linux操作系统下的打包发布(超详细,超清晰全面,图文并茂) |
目录
1.简介2.windows下的打包1)发布环境2)方法一 -- release版本发布a) release要发布程序b) 通过`windeployqt`打包
3)方法二 -- 发布成独立的可执行exe文件a) 下载工具b) 打包
4)方法三 -- 打包成安装包发布a)通过Inno Setup工具打包b)通过Advanced Installer工具打包
3.Linux下的打包发布1)发布环境2)方法一 -- 通过脚本打包a)release编译可执行文件b)编写脚本文件c)执行脚本d)解决xcb问题
3)方法二 -- 通过Linuxdeployqt部署打包a)下载linuxdeployqtb)配置Qt版本环境变量c)打包部署
4.结尾
1.简介
在对Qt应用程序的打包发布的时候,经过多方查阅资料和自身实践,本文将总结Qt程序在不同操作系统下的打包发布问题 2.windows下的打包 1)发布环境 win10专业版QT5.11Qt Creator4.7.1MinGw5.3.0 32bit 2)方法一 – release版本发布通过这个方式发布的Qt应用程序将会把可执行应用程序.exe和它所依赖的动态链接库一同拉取到一个文件夹中,将此文件夹拷贝到客户机上(无Qt开发环境也可)打开可执行应用程序即可运行。不过这样发布的缺点就是发布文件太大了。 a) release要发布程序首先需要在Qt Creator下,通过release方式运行想要发布的程序 如果使用的是MinGw的编译环境,那么,我们就会在应用程序里面找到一个叫Qt5.11.2 for Desktop的命令行工具 将其双击打开进入桌面那个存放可执行文件的Chat文件夹,使用Qt自带的打包工具windeployqt命令打包动态链接库到此文件夹
前面我们提到过,通过Qt自带的windeployqt方式发布的程序,文件包很大,一班都有好几十兆,不利于迁移,所以我们还可以利用其他打包工具,将动态链接库集成一下 a) 下载工具这里我们用到的工具叫 Enigma Virtual Box,这是一个集成式的打包软件,软件本身并没有多大,只有几兆大小,但麻雀虽小五脏俱全,该有的发布功能都有,并且操作见到,到官网下载 需要注意的是,这第二种打包方式是建立在第一种打包方式通过windeployqt的打包方式之上的,需要第一步的打包文件夹。所以第一种打包方式是基础 人们常说no picture say jb,所以下面是详细图片的记录,打开Enigma Virtual Box软件操作如下
使用这种方式打包的应用程序比前者小了很多,并且是独立的可执行文件,可以直接打开,方便了许多 4)方法三 – 打包成安装包发布如果是想打包成桌面软件安装包的形式那种,也是需要打包工具来实现,因为博主暂时没有这方面的需求,但是也给出两种解决方式 a)通过Inno Setup工具打包Inno Setup是一种专门应用于应用程序安装包打包的工具,可以自行定义发布者的信息和版本信息等,具体方式可参考此篇博文,站在巨人的肩上 Inno Setup打包教程 b)通过Advanced Installer工具打包Advanced Installer也是一种强大的打包工具,发布定义方式众多,具体可参考这篇博文 Advanced Installer打包教程 3.Linux下的打包发布 1)发布环境 deepin15.11Qt 5.10.1Gcc 64bit 2)方法一 – 通过脚本打包 a)release编译可执行文件在Linux中使用Qt以release的方式编译运行,然后将得到的可执行文件拷贝到一个新的地方,比如博主这里在桌面新建的一个叫pic的文件夹
使用命令进入可执行文件的目录下,然后新建两个shell脚本 pack.sh : 用于拷贝程序连接的动态库到要打包的文件夹中。命令编写如下 #!/bin/sh exe="picClient" #需要发布的程序名称 pwd="/home/ohuohuoo/Desktop/picClient" #创建文件夹的位置 files=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }') cp $files $pwdpicClient.sh : 此脚本名必须和要打包发布的程序名字相同,我这里发布的名字为picClient,所以命名为picClient.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 "$@"
使用上述的步骤打包的文件夹,将其压缩成解压包拷贝到目标用户机上运行,如果对方安装有Qt开发环境,那么就可以成功运行,但是如果对方没有,而且还是Ubuntu的操作系统的话,就会提示无法加载xcb插件的问题,一般这种问题就是缺少了两个动态库的依赖环境 libQt5XcbQpa.so.5libQt5Dbus.so.5这是两个链接,需要使用命令来查看Qt不同版本对应的这两个文件的实体文件(直接拷贝链接文件无效),进入Qt安装环境中下的lib库,一般是/Qt5.xx.x/xx.x/gcc_xx/lib这路径,进入后找到并复制到打包文件夹中 然后将找到的两个依赖库重命名为链接文件,方便脚本查找 windows下有Qt自带的打包工具windeployqt,而Linux下这样也有这样的部署工具,只不过这不是自带的,他在开源的GitHub上有编译好的程序文件,只需要进行调用即可linuxdeployqt下载 打开终端,然后输入vim ~/.bashrc命令,然后在文件末尾追加以下关于Qt环境的内容,主要需要替换为自己的Qt安装路径 #添加Qt环境 -- 需要换成自己的Qt安装路径 export PATH=/home/ohuohuoo/Qt5.10.1/5.10.1/gcc_64/bin:$PATH export LD_LIBRARY_PATH=/home/ohuohuoo/Qt5.10.1/5.10.1/gcc_64/lib:$LD_LIBRARY_PATH export QT_PLUGIN_PATH=/home/ohuohuoo/Qt5.10.1/5.10.1/gcc_64/plugins:$QT_PLUGIN_PATH export QML2_IMPORT_PATH=/home/ohuohuoo/Qt5.10.1/5.10.1/gcc_64/qml:$QML2_IMPORT_PATH然后执行source ~/.bashrc命令,使得修改命令在不重启的情况下立刻生效 和之前一样,也是在桌面新建一个目录用于打包,并将通过release运行的要发布的可执行文件拷贝进去 这里提示我的系统太新了(deepin 15.11😄),让我选择个旧一点的系统使用linuxdeployqt,查阅文档之后发现,这版本的linuxdeployqt只支持Ubuntu16.04和openSUSE 15.0以下Linux系统 所以我这里换成了Ubuntu14.1并换了个linuxdeployqt版本()同样执行到这一步,显示报错,提示没有加载Icon文件 因此需要删除默认生成的图标文件default.png,并重新为此提供一个,以logo.png为例,然后再将目录文件下生成的default.desktop文件重命名为picClient.desktop(需要和要打包的可执行文件名称一致),修改内容如下 [Desktop Entry] Version=1.0 # 版本 Type=Application # 类型 Name=picClient # app名 Exec=picClient # app执行路径 Icon=logo.png # 图标 Comment=This is a simple program # 说明信息 Terminal=false # 是否在终端启动 Categories=Development;完成之后,重新执行linuxdeployqt picClient -appimage命令,提示无误后,将会生成一个以.AppImage结尾的文件 成功之后,为其赋予权限,运行即可成功显示效果 chmod +x MyApp-x86_64.AppImage ./MyApp-x86_64.AppImage注意:通过linuxdeployqt方式打包的应用程序,不支持从Qt4到Qt5的源码迁移,因为编译环境不同,先前也是准备直接将我在deepin中的想要发布的程序源码拷贝到我的uUbuntu14中去重新利用Qt来编译之后再使用linuxdeployqt打包,发现始终无法解决cannot execute binary file的问题,后来发现是我Qt版本的原因,一个是Qt4一个是Qt5,所以只能在Ubuntu中重新编写了个简单demo用于发布演示。 通过这种方式打包的文件,由于linuxdeployqt的绿色开源性,所以支持在不同的Linux发行版上运行,很方便,各位也可以尝试下(😄😄) 4.结尾这篇博文是我查阅许多资料,并且经过自己的实践理解,总结出来的,非常感谢提供帮助的博文,这里附上博文参考链接 打包发布Linux打包发布linuxdeployqt打包发布 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |