Bootstrap

linux下利用linuxdeployqt工具进行打包

一、前言

在用这个工具之前,都是直接使用脚本进行的打包,但是打出来的包在更高的linux系统中运行不起来,所以了解了linuxdeployqt工具。

脚本打包详细看Linux下的QT程序的打包、运行、和关闭程序教程整理_linux qt程序-CSDN博客

二、linuxdeployqt下载安装

下载地址:

https://github.com/probonopd/linuxdeployqt/releases

直接下载编译好的应用程序即可

下载完成之后可看到 linuxdeployqt-continuous-x86_64.AppImage

为了方便使用,可以简化名称

mv linuxdeployqt-continuous-x86_64.AppImage linuxdeployqt

看一下有没有可执行程序的权限,如果没有,需要加一个权限,可通过命令,也可直接在属性中修改

chmod +x linuxdeployqt

 

为了不用每次都在该程序的文件下打开终端,为了方便使用,将linuxdeployqt移到/usr/local/bin目录下

mv linuxdeployqt /usr/local/bin

三、使用linuxdeployqt打包

先创建一个文件夹(install) ,将可执行程序复制到该文件夹下

在该文件夹下打开终端,执行打包命令 

linuxdeployqt 可执行程序名称 -appimage

需要注意的是:

1.由于是默认生成的default.desktop文件,里面的参数是不完整的(这也是上面命令失败的原因,不过不影响使用),如果有需要生成AppImage映像,需要先创建该文件并正确填写参数或者执行一次命令之后修改已默认生成的default.desktop文件。

2.在没有第三方依赖库的情况下会自动生成一个lib文件夹存放程序依赖的库,如果打包的程序有依赖的第三方库,需要自行先创建一个lib文件夹,将依赖的第三方库放到lib文件夹里,在执行命令进行打包。

3.如果想要设置可执行程序的图标,将图标放入该文件夹下,修改default.desktop里面的Icon参数即可。

修改default.desktop之后重新执行命令

[Desktop Entry]
Type=Application
Name=Keyboard
Exec=AppRun %F
Icon=default
Comment=Edit this default file
Terminal=true
Categories=Application;

执行成功之后即可看到

四 、压缩打包

两种形式的压缩的打包:

1.将所需库以及可执行程序等进行打包压缩

2.直接将生成的AppImage映像进行打包压缩

需要注意:执行AppImage映像时,通过QCoreApplication::applicationDirPath()获取的程序路径是一个临时挂载的路径,并不是执行该映像的实际运行路径。

解决:

QString getCurrentPath()
{
    // 尝试从AppImage环境变量中获取应用程序的实际路径
    QString appImagePath = QString::fromLocal8Bit(qgetenv("APPIMAGE"));
    if(appImagePath == "")
    {
        //qDebug() << "APPIMAGE环境变量未设置,使用applicationDirPath():" << QCoreApplication::applicationDirPath();
        return  QCoreApplication::applicationDirPath();
    }
    else
    {
        QDir appDir(appImagePath);
        //qDebug() << "应用程序的实际安装目录是:" << appDir.currentPath();
        return appDir.currentPath();
    }
}

可替换为该函数获取当前运行路径

五 、问题

将上面两种包都给到别人使用时,大多数电脑两种都可以用。但是个别电脑,第一种包含环境的可执行程序是可以运行的,第二种AppImage映像运行不起来,报错如下:

希望广大网友可以解答这个问题。

;