linux的qt程序部署
一、arm64版本1、准备1、qt下载安装目前arm64版本中官网暂未提供最新的qt离线安装包因此直接下载默认5.12.8也可自己下载源码自行编译sudo apt install qt5-default如有开发需求可直接下载qtcreatorsudo apt install qtcreator2、打包工具Linuxdeployqt下载使用Git命令下载linuxdeployqt源码git clone https://github.com/probonopd/linuxdeployqt.git或者自行去github下载源码https://github.com/probonopd/linuxdeployqt/tree/master下载Appimagetool-aarch64.AppImagehttps://github.com/AppImage/AppImageKit/releases下方有之前的旧版本也可使用3、编译linuxdeployqt如果第一步的qt安装成功一般默认会配置完成qmakeqmake -v查看是否配置成功看到qmake的版本号则表示设置成功。进入linuxdeployqt源码所在文件夹cd linuxdeployqt使用qmake与make命令在linuxdeployqt文件夹下编译qmake make编译完成后会在linuxdeployqt源码文件夹下生成bin文件夹在bin文件夹下将会有linuxdeployqt可执行程序编译成功一般默认是有可执行权限将该文件放到/usr/local/binsudo cp linuxdeployqt /usr/local/bin在任一其他目录中打开终端窗口使用一下命令查看是否成功linuxdeployqt --version4、安装patchelfsudo apt install patchelf如果不安装patchelf在打包时可能会出现错误,可以通过一下命令查看patchelf是否安装成功patchelf --version5、配置Appimagetool找到下载的文件appimagetool-aarch64.AppImagemv appimagetool-aarch64.AppImage appimagetool sudo chmod 777 appimagetool将appimagetool同样移动到/usr/local/bin目录下sudo cp appimagetool /user/local/bin2、程序打包先构建需要打包的文件夹mkdir qwer把所需打包程序复制到打包文件夹cp Face_Machine qwer之后执行打包命令linuxdeployqt simple_live_qtwidgets -appimage -bundle-non-qt-libssimple_live_qtwidgets这是你的 Qt 应用程序的可执行文件名称。你需要将其替换为你实际的 Qt 应用程序的可执行文件的路径和名称。例如如果你的应用程序可执行文件名为myapp且位于/home/user/myappdir目录下那么这里应填写/home/user/myappdir/myapp。-appimage这是一个选项用于指示linuxdeployqt将应用程序打包为 AppImage 格式。如果你希望生成 AppImage 包就保留这个选项。-bundle-non-qt-libs这个选项会让linuxdeployqt尝试将非 Qt 的库也打包到应用程序包中。如果你有非 Qt 的依赖库需要包含在打包中就使用这个选项。成功之后出现以下结构二、x86_64架构linuxdeployqt可直接下载https://github.com/probonopd/linuxdeployqt/releases/tag/continuous下载完成后使用命令设置权限与重命名并移动到/usr/local/bin目录下mv linuxdeployqt-continues-x86_64.AppImage linuxdeployqt chmod xxx linuxdeployqt sudo cp linuxdeployqt /usr/local/binQt库路径设置到环境变量工具会根据生成的可执行文件自动搜索依赖故我们需要确保Qt库的相关路径设置到环境变量中这样工具在搜索时才能找到并拷贝它们。另外拷贝文件对环境变量的使用不想要重启系统那么麻烦所以我们修改.bashrc文件仅对当前用户永久有效。sudo gedit ~/.bashrc在.bashrc文件末尾追加内容如下#add qt env export PATH/home/dw/Qt5.14.2/Qt5.14.2/gcc_64/bin:$PATH export LIB_PATH/home/dw/Qt5.14.2/Qt5.14.2/gcc_64/lib:$LIB_PATH export PLUGIN_PATH/home/dw/Qt5.14.2/Qt5.14.2/gcc_64/plugins:$PLUGIN_PATH export QML2_PATH/home/dw/Qt5.14.2/Qt5.14.2/gcc_64/qml:$QML2_PATH其中/home/dw/Qt5.14.2/Qt5.14.2/gcc_64是本次测试环境Qt安装目录大家根据自己的情况替换。然后使用source命令让文件立即生效。source ~/.bashrc然后对环境变量测试下qmake -v之后直接执行打包程序即可三、qt程序部署1、脚本程序自启动程序开机自启在/etc/xdg/autostart/ 目录下使用文本编辑器如 gedit 或 vim创建一个新的 .desktop 文件例如 myapp.desktop内容[Desktop Entry] TypeApplication NameMy Application CommentThis is my custom application that runs on startup Exec/可执行文件夹目录/start.sh Terminalfalse CategoriesSystem;在上述内容中Name 是在自动启动应用程序列表中显示的名称。Comment 是对应用程序的描述。Exec 是要执行的脚本路径示例中是 start.sh。你需要将其替换为你实际的脚本文件名。建议脚本放在可执行文件夹Terminal 设置为 false表示该应用程序不会在终端中运行如果你的脚本不需要终端交互。如果脚本需要在终端中运行可以将其设置为 true。Categories 可以用于对应用程序进行分类这里设置为 System。改变权限sudo chmod xxx myapp.desktop在程序执行的目录中编写两个脚本文件run_app.sh、start.shchmod xxx run_app.sh start.sh#!/bin/bash export LD_LIBRARY_PATH$(dirname $0)/lib:$LD_LIBRARY_PATH $(dirname $0)/AppRunstart.sh#! /bin/bash cd $(dirname $0) sudo ./run_app.sh之后改变脚本权限chmod xxx run_app.sh start.sh2、无界面程序脚本自启动创建service首先进入到/etc/systemd/system目录cd /etc/systemd/system使用vim创建一个新文件,假设我们的项目叫myAccsscevim myAccssce.service内容:[Unit]DescriptionmyAccssceAfternetwork.targetWantsnetwork.target[Service]TypesimpleWorkingDirectory/home/dw/Accessdoors_shenyang/bin/qwerExecStart/home/dw/Accessdoors_shenyang/bin/qwer/start.shExecStop/bin/kill -s QUITRestartalwaysStandOutputsyslogStandErrorinherit[Install]WantedBymulti-user.target上面的代码仅需要改三处即可:Description后面是你自己项目的名字ExecStart紧跟的是脚本的绝对目录ExecStart这一行最后一部分是脚本的绝对目录WorkingDirectory这一行最后一部分是脚本的绝对目录程序工作路径修改之后,按Esc键,然后输入:wq即可保存。2、设置开机自启刷新:sudo systemctl daemon-reload运行下面代码可以设置服务为开机启动sudo systemctl enable myAccssce运行下面代码可以禁止服务开启启动sudo systemctl disable myAccssce3、设置账户免密如果需要要让 sudo 执行命令时不需要密码可以通过修改 /etc/sudoers 文件来实现。具体步骤如下设置切换为管理员用户密码 su passwd 之后输入密码, su之后即可切换为管理员账户 之后输入su即可切换,操作之前一定要先备份文件如cp sudoerssudoers.bak 1、以管理员身份打开终端执行命令 sudo vim sudoers 。2、在打开的文件中找到类似于 %sudo ALL(ALL:ALL) ALL 的行。这一行表示允许在 sudo 组中的用户以任何用户的身份在任何主机上执行任何命令并且需要输入密码。3、在该行的下方添加类似的条目 username ALL(ALL:ALL) NOPASSWD: ALL将 username 替换为你希望无需密码运行 sudo 命令的用户名。例如如果你的用户名是 dw则添加 dw ALL(ALL:ALL) NOPASSWD: ALL。这表示用户 dw 以任何用户身份在任何主机上执行任何命令时都无需输入密码。4、保存并退出文件。举例无界面在文件附录转载于后添加编写Linux/Ubuntu arm64下使用linuxdeployqt打包Qt程序_linuxdeployqt arm-CSDN博客