ubuntu18.04通过linuxdeployqt打包Qt5.0项目

2019年10月19日

文章目录

  • Ubuntu18.04通过linuxdeployqt打包Qt5.0项目
    • 选择linuxdeployqt
    • 安装linuxdeployqt
      • 下载linuxdeployqt可执行程序
      • 编译源代码安装linuxdeployqt
    • 打包Qt项目

Ubuntu18.04通过linuxdeployqt打包Qt5.0项目

由于项目需要,项目组用Qt5.0编辑器编写了一个C++项目,在编写的时候免不了有许多对环境的依赖。现在,到了数据采集的一步,需要前往甲方所在公司运行所写的软件进行数据采集。但由于甲方公司内部计算机不方便联网,无法现场布置软件环境,因此需要对所写的软件进行打包,得到一个不依赖于环境的可执行的软件(当然还是跑在linux环境下,更确切地说是在Ubuntu18.04下)。有了这样的需求后,这两天做了些尝试,最后成功打包了项目,在此做些记录。

选择linuxdeployqt

针对Qt,linuxdeployqt这个工具可以帮助我们快速打包Qt项目。在windows下对应的软件叫windowsdeployqt。

安装linuxdeployqt

linuxdeployqt的github网址:linuxdeployqt的github网址
installation
github上提供了两种安装linuxdeployqt的方法,分别是直接下载编译好的安装包安装,或者从源代码安装。两种方式都不难。
但是由于linuxdeployqt还没有发布Ubuntu18.04相应的版本,因此,Ubuntu18.04的用户最好是编译源代码安装,不然在用linuxdeployqt打包Qt项目的时候会报类似于操作系统版本过高的错误。

下载linuxdeployqt可执行程序

  • 可执行程序下载地址:linuxdeployqt-6-x86_64.AppImage

  • 建议下载后修改文件名,将文件名修改为 linuxdeployqt。

  • 修改linuxdeployqt的权限,可以使用以下命令:

sudo chmod a+x linuxdeployqt
  • 然后可以考虑将该文件拷贝到目录 /usr/local/bin/ 下,方便之后直接使用命令 linuxdeployqt。拷贝命令如下:
sudo cp linuxdeployqt /usr/local/bin/

编译源代码安装linuxdeployqt

由于我的操作系统是Ubuntu18.04,目前需要通过源代码编译安装linuxdeployqt。

  • 编译源代码安装的参考网址:参考网址

  • 我们默认已经安装好了g++、git等工具,如果没有的话得先安装。

  • 还需要安装 patchelf 工具,命令如下:

sudo apt install patchelf
  • git克隆linuxdeployqt源代码,命令如下:
git clone https://github.com/probonopd/linuxdeployqt.git
  • 进入linuxdeployqt文件夹,命令如下:
cd linuxdeployqt
  • 修改 tools/linuxdeployqt/main.cpp 源代码,注释掉源码中版本判断的语句,可以通过指令 gedit tools/linuxdeployqt/main.cpp 来修改源码:
gedit tools/linuxdeployqt/main.cpp

需要注释的代码如下:

// openSUSE Leap 15.0 uses glibc 2.26 and is used on OBS
        /*if (strverscmp (glcv, "2.27") >= 0) {
            qInfo() << "ERROR: The host system is too new.";
            qInfo() << "Please run on a system with a glibc version no newer than what comes with the oldest";
            qInfo() << "currently still-supported mainstream distribution (xenial), which is glibc 2.23.";
            qInfo() << "This is so that the resulting bundle will work on most still-supported Linux distributions.";
            qInfo() << "For more information, please see";
            qInfo() << "https://github.com/probonopd/linuxdeployqt/issues/340";
            return 1;
        }*/
  • 当前目录中有一个 CMAKELIST 文件,执行cmake命令:
cmake CMAKELIST
  • 执行make命令编译源代码:
make
  • 编译完成后,在目录 tools/linuxdeployqt/linuxdeployqt 下会生成一个可执行文件 linuxdeployqt,修改其权限:
cd ./tools/linuxdeployqt
sudo chmod a+x linuxdeployqt
  • 为了方便之后使用,可以将该可执行文件复制到 /usr/local/bin 目录下:
sudo cp linuxdeployqt /usr/local/bin/
  • linuxdeployqt命令可能要用到选项 -appImage(实际上我就用到了),因此需要安装一下 appimagetool,下载和安装命令如下:
sudo wget -c "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" -O /usr/local/bin/appimagetool
sudo chmod a+x /usr/local/bin/appimagetool

打包Qt项目

在Qt中打开需要打包的Qt项目,选择 release 编译。在项目文件夹下会出现一个 appname_***_release*** 的文件夹,将该文件夹中的 appname 的编译好的文件拷贝到一个单独的文件夹中,这个文件夹也可以命名为 appname。注意:appname为项目的名字,需要根据自己的项目名做修改。
然后执行命令:

linuxdeployqt appname -appimage

接下来就是等待了,等待打包完成。完成后在文件夹中会出现一个 appname_***.AppImage的可执行文件,这个可执行文件就是我们需要的文件了。
在执行这条命令时可能会报如下错误:

Categories entry not found in desktop file
.desktop file is missing a Categories= key

说的是在.desktop文件中少了一个属性Categories,所以我们需要在desktop文件中手动加入一行:

Categories=Application;

再次执行 linuxdeployqt 命令即可。

你可能感兴趣的:(技术)