《树莓派入门(四)--Qt打包发布和开机自启动的几种设置》

本文详细介绍了在树莓派上打包Qt程序的方法,包括创建运行文件夹、编译程序、复制库文件及平台文件等步骤,以及如何通过不同方式设置程序自启动,适用于树莓派软件的发布。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

树莓派软件打包发布

这里只演示如何在树莓派下打包Qt免安装程序带oepngl程序,程序名称为KeDeCJ6,后面遇到名字自行替换,大致步骤如下:

  1. 找个地方,比如桌面,创建空文件夹KeDeCJ6EXE,这个将用来存放KeDeCJ6程序的运行文件
  2. 先将工程使用Release模式编译,编译完后从目录把执行文件(带二进制文件KeDeCJ6)拷贝到KeDeCJ6EXE 我这里的文件夹名称是build-KeDeCJ6-Desktop_Qt_5_11_3_GCC_64bit-Release
  3. 在上一步的文件夹中(KeDeCJ6EXE)新建文件copylib.sh,通过指令设置权限
  4. bashchmod 777 copylib.sh
  5. 在 copylib.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
    
  6. 打开终端并进入到当前文件夹,输入/copylib.sh KeDeCJ6 其中, KeDeCJ6 是运行copylib.sh 脚本的参数 大致意思就是通过 ldd 显示链接库文件并将库都复制放到当前目录的lib文件夹中。
  7. 进入QT的安装目录,找到platforms文件夹,我的路径是/usr/lib/arm-linux-gnueabihf/qt5/plugins/platform将整个platforms文件夹复制到KeDeCJ6EXE文件夹中,注意:这时复制的是整个文件夹,这使得KeDeCJ6EXE文件夹中会多出一个platforms文件夹
  8. 上文的copylib.sh放到KeDeCJ6EXE/platforms/中,并运行./copylib.sh libqxcb.so,这时会得到lib文件夹——libqxcb.so的库文件夹
  9. 将libqxcb.so的库文件夹中的所有文件复制KeDeCJ6EXE文件夹中,然后删除KeDeCJ6EXE/platforms/lib文件夹
  10. 在KeDeCJ6EXE文件夹中sudo vim KeDeCJ6.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 "$@"
  1. 执行chmod 777 giptables.sh 到这里就基本完成了,不添加KeDeCJ6.sh 也行直接点击运行文件运行看是否能运行,如果正常运行,如果不能正常运行,将目录下所有的文件都修改下权限在尝试 。这时就可以打包到其他树莓派运行了

添加程序自启动

在树莓派上调试的时候都是通过ssh连接在控制台上命令启动,或者Qt编译完后直接运行启动这种方式适合测试和调试,程序弄好之后需要发布程序和设置开机启动,这样树莓派一上电就开始运行程序。查阅网上的资料,主要有三种方法,

一、/etc/rc.local添加启动项;

  1. 执行命令编辑rc.local文件
  sudo vim /etc/rc.local
  1. 找到exit 0 上面一行添加语句
  /home/pi/Desktop/KeDeCJ6EXE/KeDeCJ6 &
  1. 表示运行KeDeCJ6 文件 而& 符号可以简单理解为让程序运行在后台,然后执行sudo reboot 重启树莓派 尝试了多次,发现该方法并不能保证成功,用reboot 重启的话成功率还高点,断点重启的话基本都不行。此外,成功的时候如果输入
 ps -ef | grep KeDeCJ6

来查看进程情况,笔者这边这个方法基本不行,暂时不知道原因 ,进程在,就是没有成功运行。。
在这里插入图片描述
在这里插入图片描述

二、~/.config/autostart下通过桌面启动应用

  1. 进入用户目录下的.config目录,里面如果没有autostart目录的话就新建一个

    cd ~/.config/autostart
    
  2. autostart目录下新建auto_start_test.desktop文件,编辑内容如下:

    [Desktop Entry]
    Type="Application"
    Exec="/home/pi/Desktop/KeDeCJ6EXE/KeDeCJ6 &"
    

    两种写法,有时候上面那个可以,有时候下面可以,但是下面成功率高,上面有可能搞错了

    [Desktop Entry]
    Type=Application
    Name=KeDeCJ6
    Exec=/home/pi/Desktop/KeDeCJ6EXE/KeDeCJ6 &
    
  3. 重启树莓派进行测试。这种方法一般是用于桌面应用的自启动,Qt就是属于这种桌面应用, 但听说这种启动不是每次都有效,我这边断电后有1-2次启动失败了。

三、是在/etc/init.d/中添加服务项。

  1. 执行ls /etc/init.d 可以看到该目录下有很多服务程序文件
  2. 在这里添加自己的服务文件,就可以对其进行配置从而实现自启动,在该目录下新建文件
    auto_start_test,
    cd /etc/init.d
    sudo vim auto_start_test
    
  3. 编辑内容:
    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides: Auto_Start_Test
    # Required-Start: $remote_fs
    # Required-Stop: $remote_fs
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Auto Start Test 
    # Descrption: This service is used to test auto start service
    ### END INIT INFO
    
    case "$1" in
        start)
            echo "Stat"
            /home/pi/Desktop/KeDeCJ6EXE/KeDeCJ6 &
            ;;
        stop)
            echo "Stop"
            killall KeDeCJ6 
            exit 1
            ;;
        *)
            echo "Usage:service Auto_Start_Test start|stop"
            exit 1
            ;;
    esac
    exit 0
    

这是一个bash脚本,指定了用start和stop命令进行服务的启动和停止,“BEGIN INIT INFO”那段注释是LSB标准说明,写不写都行,不写的话后面会有个警告。保存文件 ,执行下面指令 。

sudo chmod 777 auto_start_test//开放权限
sudo update-rc.d auto_start_test//将该服务添加到自启动项
//手动启动服务来测试
sudo service auto_start_teststart//启动服务
sudo service auto_start_teststop//停止服务

重启树莓派查看效果,可以看到无法自行启动,查看服务是存在这个服务的,但是就是没有效果。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200325090312880.png

四、总结

脚本程序可以在自动启动窗口这一步之前运行,但是用户程序是不行。所以Qt打包完的程序因为是图形界面所以需要使用 ~/.config/autostart下通过桌面启动应用。感觉是应该需要启动界面来支持Qt的程序运行,不然窗口坐标怎么获取呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未*望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值