zoukankan      html  css  js  c++  java
  • linux下对qt编写的程序进行部署

    当我们完成程序设计之后,需要将可执行程序交付客户,而运行环境里面可能是没有相关支持库的,这个时候就涉及到部署的相关问题。对于我们在Linux下基于QT编写的图像处理程序,我们采用linuxdeployqt 进行部署,以下是相关注意步骤。我成功的实现了GOQTTemplate在ubuntu16.04上编译,并且在ubuntu18.04上的运行:
    1.linuxdeployqt 安装
    最简单的方法直接下载编译好的 linuxdeployqt-x86_64.AppImage文件(https://github.com/probonopd/linuxdeployqt/releases),
    将其改名字为linuxdeployqt,并chmod a+x,然后复制到 /usr/local/bin/。
    命令行输入 linuxdelpoyqt –version,输出linuxdeployqt 版本就安装成功。
     
    $ mv linuxdeployqt-x86_64.AppImage linuxdeployqt
    $ mv ./linuxdeployqt /usr/local/bin
    $ linuxdelpoyqt --version
    linuxdeployqt 4 (commit 988d294), build 481 built on 2018-02-02 15:05:23 UTC
     
    2.打包自己的程序
     
    将自己的qt程序(如myQtApp)复制到一个目录(如 qtTest),运行
     
    $ linuxdeployqt ./myQtApp -appimage
     
     
    3.在ubuntu 中添加qt 应用程序图标
     
    修改qt 目录下的desktop 文件。可以按照ubuntu 官方提示修改。
     
    #-- 全局安装(所有用户可用),将xxx.desktop 复制到/usr/share/applications  
    #-- 当前用户可用, 将xxx.desktop 复制到 ~/.local/share/applications 目录即可
    #--appName.desktop
    [Desktop Entry]
    Version=1.0 #app的版本
    Name=myQtApp #app的名字
    Comment= this app use for xxx #说明信息 
    Exec=/path/to/your/QtApp/myQtApp #app的执行路径,绝对路径
    Icon=/path/to/your/app_icon/myQtApp.png #icon 路径,绝对路径
    Terminal=false #是否在终端启动,效果自己试一下就知道了
    Type=Application
    Categories=Utility;Application;
     
    4、关于qt.conf
    这个文件指定了qt 程序的运行环境。
    引用qt说明的原话:
    The qt.conf file can be used to override the hard-coded paths that are compiled into the Qt library. These paths are accessible using the QLibraryInfo class. Without qt.conf, the functions in QLibraryInfo return these hard-coded paths; otherwise they return the paths as specified in qt.conf.
    即我们可以使用qt.conf 指定qt程序的运行路径和库路径。
    The file should have a Paths group which contains the entries that correspond to each value of the QLibraryInfo::LibraryLocation enum. See the QLibraryInfo documentation for details on the meaning of the various locations.
    这个文件应该要包含QLibraryInfo::LibraryLocation enum,如以下内容
    Entry Default Value
    Prefix 程序运行的路径,一下所有的路劲都是相对于这个路径
    Libraries 程序的库库路劲,linuxdeployqt会自动再这个目录生成./lib,并将需要的库拷贝过来
    … 
     
    主要有这几个,多余的可以上qt帮助文档
     
    # Generated by linuxdeployqt
    # https://github.com/probonopd/linuxdeployqt/
    [Paths]
    Prefix = ./         #程序的运行路劲
    Libraries =  ./lib  #程序的库路径
    Plugins = ./plugins #插件路径
    参考:http://doc.qt.io/qt-5/qt-conf.html
    5.补充
     
    虽然linuxdepoyqt可以帮我们解决多数情况下库的依赖问题,但是也有的时候不能完整解决。这个时候就需要我们自己复制所依赖的库。
    提供一个脚本,复制依赖库,复制以下代码,将其保存成为 copylib.sh
     
    #!/bin/sh
    bin=$1         #发布的程序名称  

    desDir="./lib" #你的路径  

    if [ ! -d $desDir ];then
          #echo "makedir $desDir"
          mkdir $desDir
    fi 
    libList=$(ldd $bin | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')
    cp $libList $desDir

    命令行 运行
    chmod a+x ./copylib.sh
    ./copylib.sh ./myapp
     
     
    就可以复制所需要的库到当前目录下的 ./lib 文件夹中
    通常情况下,结合linuxdelpoy 和 copylib.sh 可以解决Linux 下 qt 程序的库依赖问题
     
     
    6.注意事项
    linux下安装Qt5.7后添加qmake环境变量后出现错误
    执行
    qmake -v
     
    出现错误:qmake: could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake’: No such file or directory
    分析:
    qtchooser默认选择路径中没有指向qmake路径
    解决方法:
    cd /usr/lib/x86_64-linux-gnu/qt-default/qtchooser
    vim default.conf 
    将第一行中的/usr/lib/x86_64-linux-gnu/qt4/bin/qmake
    替代为qmake的路径(我的安装路径 /home/xuin/Qt5.7.0/5.7/gcc_64/bin)
     
    压缩解压缩命令
     
    tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成jpg.tar 
     
    tar -czf jpg.tar.gz *.jpg   //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
     
     tar -cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
     
    tar -cZf jpg.tar.Z *.jpg   //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
     
    rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux
     
    zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux
     
    解压
     
    tar -xvf file.tar //解压 tar包
     
    tar -xzvf file.tar.gz //解压tar.gz
     
    tar -xjvf file.tar.bz2   //解压 tar.bz2
     
    tar -xZvf file.tar.Z   //解压tar.Z
     
    unrar e file.rar //解压rar
     
    unzip file.zip //解压zip
     



  • 相关阅读:
    DS4700磁盘阵列的控制器微码升级操作记录(收录百度文库)
    Android 解决布局无法对齐的情况
    android 模仿大众点评团购卷列表多余3条时折叠,点击时显示剩余全部的功能
    android 解决ScrollView中的子布局不能够填充整个ScrollView的情况。
    Android在代码中设置控件的drawableLeft,drawableRight,drawableTop,drawableBottom。
    android RadioGroup中设置selector后出现多个别选中的RadioButton的解决办法
    Android 动态的给Button、TextView、ImageView等控件设置了background后,再设置padding属性时该属性不起作用
    Android Universal Image Loader java.io.FileNotFoundException: http:/xxx/lxx/xxxx.jpg
    Android2.3系统 自定义的PopupWindow在实例化时报空指针异常
    android精品开源项目整理
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/10337738.html
Copyright © 2011-2022 走看看