zoukankan      html  css  js  c++  java
  • Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)

    本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行。

    默认前提:另外一个系统和本系统是同一个系统版本。

    1,编写导出依赖包的脚本copylib.sh

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

    更改可执行权限

    chmod u+x copylib.sh
    
    • 1
    • 2

    2,打开终端并进入到存放程序的(假设叫MyRelease)文件夹,运行下面命令(假设程序叫MyApp)

    ./copylib.sh MyApp
    
    • 1
    • 2

    在此目录下会自动生成lib文件夹,脚本实际上是调用了 ldd MyApp指令获得MyApp运行时需要哪些库,并将库都复制放到当前目录的lib文件夹中。

    3、把lib里的所有文件剪切到 MyRelease目录下,并删除此lib文件夹。

    4、进入QT的安装目录,找到platforms文件夹,本文路径是

    /opt/Qt5.3.1/5.3/gcc_64/plugins/platforms/
    
    • 1
    • 2

    将整个platforms文件夹复制到MyRelease文件夹中,注意:这时复制的是整个文件夹,这使得MyRelease文件夹中会多出一个platforms文件夹。

    5、将上文的copylib.sh放到MyRelease/platforms/中,并运行

    ./copylib.sh libqxcb.so
    
    • 1
    • 2

    这时在当前目录会得到新的lib文件夹。 
    将lib里的所有文件剪切到 MyRelease目录下,并删除此lib文件夹

    6、在MyRelease文件夹中新建程序启动脚本MyApp.sh(脚本名称和App名称相同)

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

    更改可执行权限

    chmod u+x MyApp.sh
    
    • 1
    • 2

    7、测试程序 
    修改Qt的安装路径名称,如 /opt/Qt5.3.1/5.3 修改为 /opt/Qt5.3.1/5.311, 
    修改后,运行程序时就不能找到安装目录里的库文件了。

    sudo mv /opt/Qt5.3.1/5.3/ /opt/Qt5.3.1/5.311
    
    • 1
    • 2

    这样就可在本机上做测试了。

    在MyRelease文件夹下运行

    ./MyApp.sh
    
    • 1
    • 2

    可能会报错:

    This application failed to start because it could not find or load the Qt platform plugin "xcb".
    
    Available platform plugins are: xcb.
    
    Reinstalling the application may fix this problem.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解决办法:

    如果你修改了Qt安装路径名称,现在先修改回来,如:

    sudo mv /opt/Qt5.3.1/5.311 /opt/Qt5.3.1/5.3
    
    • 1
    • 2

    在MyRelease文件夹发现存在了一个libQt5DBus.so.5库文件,但他只是一个符号链接,需要把它补全。

    [user@localhost]$ locate libQt5DBus
    /opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.la
    /opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.prl
    /opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so
    /opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5
    /opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3
    /opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3.1
    ... 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    把这两个库文件

    /opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3
    /opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3.1
    
    • 1
    • 2
    • 3

    拷贝到MyRelease文件夹下,然后再次运行启动脚本。

    先修改路径(用以本地测试)

    sudo mv /opt/Qt5.3.1/5.3/ /opt/Qt5.3.1/5.311
    
    • 1
    • 2

    运行启动脚本

    ./MyApp.sh
    
    • 1
    • 2

    OK,程序启动成功。

    现在可以把MyRelease打包成压缩包,拷贝到其他系统上去运行了。

    友情提示,测试完毕,如果修改了Qt安装路径,不要忘记再修改回来。


    本文参考:http://blog.csdn.net/z3512498/article/details/64922180

    官网参考: http://doc.qt.io/qt-5/linux-deployment.html

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zbc415766331/article/details/78108466
  • 相关阅读:
    对称加密和非对称加密
    数字签名
    内存溢出和内存泄漏
    生产随机字符串
    天才高中生参与斯坦福新研究:在图像压缩上,人类比算法强
    用机器人替代宇航员!日本打造远程操作机器人
    机器人也能拥有“物理直觉”?谷歌这款机器人真是厉害了
    35所高校新设人工智能本科专业 专家:人工智能非孤立专业
    “入职1年,我和做 AI 的同学薪资翻了 2 翻!”
    让机器学会认脸究竟有多少用处
  • 原文地址:https://www.cnblogs.com/findumars/p/9361999.html
Copyright © 2011-2022 走看看