• Linux环境下Qt应用程序打包与发布


    本文介绍Linux环境下Qt应用程序的打包与发布。

    Linux环境下,在开发机器上开发完应用程序,需要部署到其他非开发环境的机器上,这时,需要对开发的Qt应用程序进行打包,以确保可以在其他机器平台(非开发环境)上能正常使用。

    1.创建目录

    为方便各文件的有效组织,需对不同的文件进行归类,这里以“fixture”项目为例。建立“fixture”文件夹(可根据实际项目进行命名),在此文件夹下依次建立"bin","lib","plugins"文件夹,以备用。如下图所示。

    2.lib文件夹

    lib文件夹主要放置应用程序依赖的一些库。这里建立"copylib.sh"一个脚本。内容如下:

    1. #!/bin/bash
    2. LibDir=$PWD"/lib"
    3. Target=$1
    4. lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
    5. $(mkdir $LibDir)
    6. for Variable in ${lib_array[@]}
    7. do
    8. cp "$Variable" $LibDir
    9. done

    赋予"copylig.sh"可执行权限:

    sudo chmod a+x copylib.sh

    建立好脚本,下一步就需要找出应用程序以来的库了,这里分2步。

    1)应用程序依赖的库

    a)将"copylib.sh"复制到项目工程的"xxx-Release"目录下。

    b)执行脚本命令(命令行参数可根据情况改变):

    copylib.sh fixture

    这时,在当前目录下会自动建立一个lib的文件夹,并把应用程序依赖的库全部复制到这里。

    c)复制lib文件夹中所有内容到“1.准备工作”的lib文件夹。

    2)libqxcb.so依赖的库

    a)将"copylib.sh"复制到Qt开发工具下的"plugins/platforms"目录下。我的目录路径为:“/opt/Qt5.13.2/5.13.2/gcc_64/plugins/platforms”,如下图所示:

    b)执行脚本命令(因在系统目录,这里需要加sudo):

    sudo copylib.sh libqxcb.so

    这时,在当前目录下会自动建立一个lib的文件夹,并把"libqxcb.so"依赖的库全部复制到这里。

    c)复制lib文件夹中所有内容到“1.准备工作”的lib文件夹,如有冲突直接覆盖掉。

    至此,我们完成了“lib”文件夹的内容。

    3.plugins文件夹

    plugins文件夹主要放置Qt应用程序运行所依赖的一些插件。直接复制Qt开发工具下的"plugins"目录下的"platforms"目录到此文件夹。当然,如果应用程序还依赖其他插件可以将"plugins"目录下其他需要的插件一并拷贝。

    至此,我们完成了“plugins”文件夹的内容。

    4.bin文件夹

    bin文件夹主要放置我们编译,链接好的应用程序及Qt相关的配置。

    1)复制"xxx-Release"目录下的可执行文件到此文件夹。

    2)建立配置文件"qt.conf",填充如下内容:

    1. [Paths]
    2. Prefix=../
    3. Plugins=plugins

    指定应用程序依赖的插件。

    至此,我们完成了“bin”文件夹的内容。

    5.主目录文件夹

    应用程序要想运行,还需要配置相关的环境变量。建立1个以应用程序名称为文件名的脚本,如我的文件名为"fixture.sh",添加如下内容:

    1. #!/bin/sh
    2. appname=`basename $0 | sed s,\.sh$,,`
    3. dirname=`dirname $0`
    4. tmp="${dirname#?}"
    5. if [ "${dirname%$tmp}" != "/" ]; then
    6. dirname=$PWD/$dirname
    7. fi
    8. LD_LIBRARY_PATH=$dirname/lib
    9. export LD_LIBRARY_PATH
    10. $dirname/bin/$appname "$@"

    这里指定了库的路径及应用程序的路径。赋予脚本可执行权限:

    sudo chmod a+x fixture.sh

    至此,我们完成了主目录文件夹的所有内容。

    6.执行&测试

    将打包后的内容拷贝到非开发环境机器(可用虚拟机建立1个基本运行环境),执行主目录下的脚本:

    1. cd fixture
    2. ./fixture.sh

    正常情况下,程序得以执行。

    测试完成后就可以将文件夹打包压缩作为应用程序发布。

    注意:在执行过程中若遇到插件加载错误,可执行:

    export QT_DEBUG_PLUGINS=1

    根据输出信息找出问题。

    总结,本文介绍Linux环境下Qt应用程序的打包与发布。

  • 相关阅读:
    459. 重复的子字符串
    Note_First:Hadoop安装部署与测试
    关闭jupyter notebook报错
    Asoc codec bringup总结
    如何使用django 结合websocket 进行实时目标检测呢?以yolov5 为例
    HTB靶场之Sandworm
    第十四届蓝桥杯校内模拟赛(第一期)题解分享
    技术分歧,如何决策?
    Android之OKHttp源码解析
    M1本地部署Stable Diffusion
  • 原文地址:https://blog.csdn.net/propor/article/details/133786958