Debian_QT软件开发_QT程序打包

1 配置 linuxdeployqt 工具

1.1 下载linuxdeployqt

  • 下载 linuxdeployqt,笔者下载的是linuxdeployqt-continuous-x86_64.AppImage
sudo mkdir -p /home/s/develop/0_tools/packages
cd /home/s/develop/0_tools/packages
sudo wget https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
  • 1.
  • 2.
  • 3.
  • linuxdeployqt-continuous-x86_64.AppImage重命名为linuxdeployqt
cd /home/s/develop/0_tools/packages
sudo cp linuxdeployqt-continuous-x86_64.AppImage ../linuxdeployqt
  • 1.
  • 2.
  • linuxdeployqt添加到环境变量中
sudo ehco "export PATH=/home/s/develop/0_tools:$PATH" > /etc/profile
sudo source /etc/profile
  • 1.
  • 2.
  • 通过linuxdeployqt --version验证是否可用。

1.2 配置linuxdeployqt所需的环境变量

  • 修改/etc/profile,在文件末尾添加以下内容(笔者的Qt安装在 “/home/s/Qt5.12.9”):
export PATH=/home/s/Qt5.12.9/5.12.9/gcc_64/bin:$PATH
export LIB_PATH=/home/s/Qt5.12.9/5.12.9/gcc_64/lib:$LIB_PATH
export PLUGIN_PATH=/home/s/Qt5.12.9/5.12.9/gcc_64/plugins:$PLUGIN_PATH
export QML2_PATH=/home/s/Qt5.12.9/5.12.9/gcc_64/qml:$QML2_PATH
  • 1.
  • 2.
  • 3.
  • 4.
  • 重新生效配置
source /etc/profile
  • 1.

2 linuxdeployqt 打包Qt程序

笔者使用helloworld可执行文件作为例子。

  • 创建打包目录,笔者自定义为pack
sudo mkdir -p /home/s/develop/1_qt_project/hellowolrd/pack
  • 1.
  • 将可执行文件helloworld拷贝到pack目录下
sudo cp /home/s/develop/1_qt_project/hellowolrd/build/hellowolrd /home/s/develop/1_qt_project/hellowolrd/pack
  • 1.
  • 使用linuxdeployqt开始打包
cd /home/s/develop/1_qt_project/hellowolrd/pack
sudo linuxdeployqt hellowolrd -appimage
  • 1.
  • 2.
  • 如果有提示以下错误:
Categories entry not found in desktop file
.desktop file is missing a Categories= key
  • 1.
  • 2.

只需要在.desktop文件末尾添加Categories=Application;即可,然后重新打包就没问题了。

  • 打包完后,目录下大概有以下内容:

├── doc
│   ├── libc6
│   │   └── copyright
│   ├── libdbus-1-3
│   │   └── copyright
│   ├── liblzma5
│   │   └── copyright
│   ├── libpcre32-3
│   │   └── copyright
│   ├── libpulse0
│   │   └── copyright
│   └── libsystemd0
│       └── copyright
├── hellowolrd
├── lib
│   ├── libasyncns.so.0
│   ├── libavcodec.so.60
│   ├── libavformat.so.60
│   ├── libavutil.so.58
│   ├── libbsd.so.0
│   ├── libdbus-1.so.3
│   ├── libfdk-aac.so.1
│   ├── libFLAC.so.8
│   ├── libgcrypt.so.20
│   ├── libglib-2.0.so.0
│   ├── libglog.so.2
│   ├── libgthread-2.0.so.0
│   ├── libicudata.so.56
│   ├── libicui18n.so.56
│   ├── libicuuc.so.56
│   ├── libjsoncpp.so.25
│   ├── liblz4.so.1
│   ├── liblzma.so.5
│   ├── libnsl.so.1
│   ├── libnuma.so.1
│   ├── libogg.so.0
│   ├── libpcre.so.3
│   ├── libpng16.so.16
│   ├── libportaudio.so
│   ├── libpulsecommon-13.99.so
│   ├── libpulse.so.0
│   ├── libQt5Core.so.5
│   ├── libQt5DBus.so.5
│   ├── libQt5Gui.so.5
│   ├── libQt5Network.so.5
│   ├── libQt5Qml.so.5
│   ├── libQt5Quick.so.5
│   ├── libQt5Svg.so.5
│   ├── libQt5VirtualKeyboard.so.5
│   ├── libQt5WebSockets.so.5
│   ├── libQt5Widgets.so.5
│   ├── libQt5XcbQpa.so.5
│   ├── libsndfile.so.1
│   ├── libswresample.so.4
│   ├── libsystemd.so.0
│   ├── libvorbisenc.so.2
│   ├── libvorbis.so.0
│   ├── libwrap.so.0
│   ├── libx264.so.155
│   ├── libx265.so.179
│   ├── libXau.so.6
│   ├── libxcb-glx.so.0
│   ├── libxcb-xfixes.so.0
│   ├── libxcb-xkb.so.1
│   ├── libXdmcp.so.6
│   ├── libXext.so.6
│   ├── libxkbcommon.so.0
│   ├── libxkbcommon-x11.so.0
│   └── libXrender.so.1
├── plugins
│   ├── bearer
│   │   ├── libqconnmanbearer.so
│   │   ├── libqgenericbearer.so
│   │   └── libqnmbearer.so
│   ├── iconengines
│   │   └── libqsvgicon.so
│   ├── imageformats
│   │   ├── libqgif.so
│   │   ├── libqicns.so
│   │   ├── libqico.so
│   │   ├── libqjpeg.so
│   │   ├── libqsvg.so
│   │   ├── libqtga.so
│   │   ├── libqtiff.so
│   │   ├── libqwbmp.so
│   │   └── libqwebp.so
│   ├── platforminputcontexts
│   │   ├── libcomposeplatforminputcontextplugin.so
│   │   ├── libibusplatforminputcontextplugin.so
│   │   └── libqtvirtualkeyboardplugin.so
│   ├── platforms
│   │   └── libqxcb.so
│   └── xcbglintegrations
│       ├── libqxcb-egl-integration.so
│       └── libqxcb-glx-integration.so
├── qt.conf
└── translations
    ├── qt_ar.qm
    ├── qt_bg.qm
    ├── qt_ca.qm
    ├── qt_cs.qm
    ├── qt_da.qm
    ├── qt_de.qm
    ├── qt_en.qm
    ├── qt_es.qm
    ├── qt_fi.qm
    ├── qt_fr.qm
    ├── qt_gd.qm
    ├── qt_he.qm
    ├── qt_hu.qm
    ├── qt_it.qm
    ├── qt_ja.qm
    ├── qt_ko.qm
    ├── qt_lv.qm
    ├── qt_pl.qm
    ├── qt_ru.qm
    ├── qt_sk.qm
    ├── qt_uk.qm
    └── qt_zh_TW.qm

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.

3 启动脚本

在第2节中,我们成功的打包了hellowolrd依赖的文件。有没有想过,我们现在的机器是开发环境的机器,而不是客户使用的机器,如果我们的软件安装在了客户的机器是不是一定能运行起来呢?我们看目录下的lib,发现有好多动态库文件,也就是说我们的可执行文件依赖lib里面的内容。但我们的lib并不放在系统库目录下的。因此,我们需要通过一个脚本来启动我们的程序。

hellowolrd.bash内容如下:

#!/bin/sh
HERE="$(dirname "$(readlink -f "${0}")")"
export LD_LIBRARY_PATH="${HERE}"/lib
export QT_PLUGIN_PATH="${HERE}"/plugins
export QT_QPA_PLATFORM_PLUGIN_PATH="${HERE}"/plugins/platforms
exec "${HERE}"/hellowolrd 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

我们还需要给这个脚本文件赋予执行权限:

sudo chmod +x helloworld.bash
  • 1.

参考

  1.  【教程】linux与windows环境下qt程序打包教程

  2.  Linux下QT程序打包

  3.  linux下的Qt程序打包脚本(能避免各种问题),网上的脚本打包失败常见原因分析和雷区

  4.  Linux 环境打包 QT 程序

  5.  免安装git麒麟系统上使用linuxdeployqt 编译安装

  6.  DEB打包流程—新手入门(附自动化打包shell源码)

  7.  【QT 5 +Linux下软件桌面快捷方式+qt生成软件创建桌面图标+学习他人文章+第二篇:编写桌面文件.desktop】