在树莓派上用qt开发程序完成后,需要打包程序,这样在其他的没有程序开发环境的树莓派上也能运行,可以使用下面的方法打包qt程序:
1.在release模式下编译代码,将build-xxx release文件夹中生成的执行文件复制到自己的执行文件夹中,我这里是放在`/home/pi/output`中.
2.在output文件夹中新建脚本`cplib.sh`:
此脚本会将程序依赖库复制到当前文件夹中.
#!/bin/sh
exe="vivoMES" # 修改发布程序的名称
des="/home/pi/output/" # 修改输出可执行文件路径
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
3.在output文件夹中新建脚本`vivoMES.sh`:(请将脚本名称设置为可执行文件同名)
此脚本会执行程序.
#!/bin/sh
sleep 10 # 保证系统完成初始化后再启动目标程序,自行斟酌是否需要
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.给脚本上权限`chmod +x cplib.sh`;`chmod +x vivoMES.sh`.
5.运行`cplib.sh`: bash /home/pi/output/cplib.sh
此时执行文件依赖的库都会被赋值到output文件夹中.
测试程序是否可执行: bash /home/pi/output/vivoMES.sh
至此,打包程序已完成,接下来是设置开机自启动.
打包完成之后,需要设置开机自启动,树莓派的开机自启动有多种方法,因为我们使用的系统是带有桌面的,所以需要使用桌面启动的方法;此方法是在加载了桌面后再启动我们自定义的程序,因此需要安装带有桌面的版本,如果不是请跳过。具体步骤如下:
(1)在/home/pi/.config/目录下新建一个名为 autostart 的文件夹,代码如下;
pi@raspberry:~ $ mkdir .config/autostart
(2)在 autostart 目录下新建testboot.desktop(经测试名字任意,但后缀必须是.desktop):
pi@raspberry:~ $ nano .config/autostart/testboot.desktop
(3)在testboot.desktop中输入下面内容:
#文件内容如下:
[Desktop Entry]
Type=Application
Name=testboot
NoDisplay=true
Exec=/home/pi/testboot.sh
(4)sudo reboot 重启测试
注意:这个方法除了依赖桌面之外,如果开启了多个桌面则会导致自定义的程序多次启动。比如系统启动桌面会调用一次testboot.sh脚本,如果再用远程桌面登录到树莓派,脚本会再执行一次。
参考博客:https://blog.csdn.net/weixin_48424192/article/details/123986421