Ubuntu下Qt程序的打包发布

Ubuntu18.04
qt:5.14.0
为便于描述,我们这里假设生成的程序名称为test(即要发布的程序名称)

方法一:

1. QtCreate使用Release版本编译

将编译后生成的可执行程序(如:test)复制到一个空目录下

2.使用ldd命令查看和导出需要的库

在步骤1的目录下新建一个pack.sh文件,文件内容如下:

#!/bin/sh  
exe="test" #你需要发布的程序名称
des="/home/someone/QtProject/build-test-Desktop-Release/Test" #步骤1中的目录即本文件所在目录
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')  
cp $deplist $des

文件中有两处中文注释的地方需要修

3.编写执行程序的sh文件

在此目录下再新建一个test.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 "$@"

4.执行程序

赋予test.sh执行权限,
chmod +x test.sh

执行程序
./test.sh
将此目录打包发布即可,注意需要执行程序时是运行test.sh文件,不是release生成的可执行程序

我自己测试用的是Debug版本是可以的,Release不可以,临时写的,不太懂,仅是为了项目测试需要,赶鸭子上架写的。。。。

方法二:

没试过

打包发布Linux 版Qt应用
1、把编译的应用 主程序(例如 myqtapp) 复制 到 另一简单起名的文件夹,例如 主目录下 ~/myapp
(把应用所需的SQLite等数据库也一同放入,或者放入程序代码指定的位置,例如 /var/opt内的位置,程序使用的普通图片,按代码指定也放入指定位置或 ~/myapp内,例如,我的是放在 ~/myapp/images)

2、程序需要用到的各个插件也从Qt安装目录中复制到主程序目录内
(例如在 /opt/Qt5.8.0/5.8/gcc_64/plugins ,我用到 platforms 、 sqldrivers 和 imageformats,其中 platforms我只用到 libqxcb.so,则platforms夹内需libqxcb.so一个文件即可,sqldrivers是SQLite,Mysql驱动,imageformats是图片调用需要)

3、复制必须的 库文件 ,先建立 脚本(cplib.sh),
vi ~/myapp/cplib.sh
内容是:

#!/bin/bash
LibDir=$PWD"/lib"
Target=$1
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
$(mkdir $LibDir)
for Variable in ${lib_array[@]}
do
cp "$Variable" $LibDir
done

终端下执行命令:

cd ~/myapp
chmod +x cplib.sh
./cplib.sh myqtapp

完成后,可以见到在 ~/myapp目录内生成lib目录,内有主程序需用到的多个库文件,从中取出必要的部分,不需要全部文件
建立 ~qtlib文件夹,从 ~/myapp/lib 内复制以下必需库文件:
libicudata.so.56、libicui18n.so.56、libicuuc.so.56、libQt5Core.so.5、libQt5DBus.so.5、libQt5Gui.so.5、libQt5Network.so.5、libQt5PrintSupport.so.5、libQt5SerialPort.so.5、libQt5Sql.so.5、libQt5Widgets.so.5件和文件名中包含xcb的全部文件,例如 libX11-xcb.so.1、libxcb.so.1等
(libQt5Network.so.5、libQt5PrintSupport.so.5、libQt5SerialPort.so.5、libQt5Sql.so.5这些是我的主程序使用,自动找到,如没有对应功能,则没有对应文件)

4.复制 libqxcb.so 需要的库文件
先把 cplib.sh 复制 一份 ,放入 ~/myapp/platforms,然后
cd ~/myapp/platforms
./cplib.sh libqxcb.so
完成后, ~/myapp/platforms目录内生成lib目录,内有libqxcb.so需用到的多个库文件,从中取出必要的部分,不需要全部文件,也是复制 到 ~qtlib文件夹
libQt5DBus.so.5、libQt5XcbQpa.so.5、和文件名中包含xcb的全部文件。

5.目标机器安装 qtlib
把 qtlib 文件夹内容 放入 /usr/local/lib/qtlib
sudo权限 在/etc/ld.so.conf.d 下增加文件 usr-libs.conf
内容 是
/usr/local/lib/qtlib
然后 执行 sudo ldconfig

6.最后检查是否缺少 其他库文件,在终端下 运行 主程序
如没有 正常运行,会有出错信息提示,查看其中 的 库文件名 libXXXX.so.XX,在Qt的安装目录 中找文件
例如在:/opt/Qt5.8.0/5.8/gcc_64/lib
要注意的是区分所复制出来的文件不能是链接文件同,要找到真正的库文件,复制 到 /usr/local/lib/qtlib ,并重命名这库文件 在出错信息中显示的正确的文件名
重新执行 sudo ldconfig
重复 这第6步,直到能正常启动主程序,一般情况 下经过前面5步后,正常方式 执行应用(myqtapp)或应用启动器(myqtapp.desktop)后,没有正常显示出画面,才需要这第6步。
7. 最后, ~/myapp文件夹 就是 应用程序包含文件,一般安装放入 /opt/myapp内,有变动的文件安装一般放入/var/opt/myapp内,必需的Qt库文件一般安装放入 /usr/local/lib/qtapp(参照第5步),目标机器上就安装完成,最后,建立桌面启动器(其中 指定了 图标)
vi myqtapp.desktop
内容是

[Desktop Entry]
Version=1.0
Name=myqtapp
GenericName=myqtapp
Comment=myqtapp
Exec=/opt/myapp/myqtapp
Icon=/opt/myapp/images/myapp.ico
Terminal=false
Type=Application
Categories=Application;
StartupNotify=true
X-Desktop-File-Install-Version=0.22

8.打包,安装 都完成了。

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Linux下,将Qt程序打包发布可以通过以下步骤来完成: 1. 确保系统已安装Qt开发工具包以及相关依赖库。如果没有安装,可以通过包管理器安装,例如在Debian/Ubuntu上使用apt-get工具,执行命令sudo apt-get install build-essential qt5-default。 2. 使用Qt Creator或命令行编译和构建程序。在Qt Creator中,打开项目文件(通常是.pro文件),选择适当的构建套件并执行构建操作。在命令行中,使用qmake生成Makefile文件,然后通过make命令进行编译。 3. 检查程序是否可独立运行。在设计程序时,确保程序的依赖库是静态链接的,以便在其他机器上可以独立运行。 4. 创建一个目录,将编译生成的可执行文件和相关资源文件放入其中。 5. 创建一个启动脚本。在这个脚本中,设置程序运行所需的环境变量,并执行可执行文件。 6. 将整个目录打包成一个压缩文件。可以使用tar命令将目录打包成.tar文件,或使用zip命令将其打包成.zip文件。 7. 将压缩文件发布到目标系统上。可以通过网络上传或将其复制到可移动媒体上。 8. 在目标系统上解压缩压缩文件。如果使用.tar文件,可以使用tar命令进行解压缩,如果使用.zip文件,可以使用unzip命令进行解压缩。 9. 在目标系统上运行启动脚本。确保目标系统上已经安装了Qt运行时所需的依赖库。 通过以上步骤,可以将Qt程序打包为一个可独立运行的文件,并方便地在Linux系统上进行发布

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值