码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Ubuntu18.04平台下Qt开发程序打包的一些问题总结


    目录

    前言

    一、在Ubuntu18.04开发环境下打包有两种方式

    1、利用linuxdeployqt软件进行打包

    2、利用编写shell脚本的方式进行打包

    二、详细介绍shell脚本打包的方式

    1、新建一个空的文件夹

    2、准备脚本copylib.sh

    3、准备脚本xxxx.sh。

    4、给上述两个脚本添加可执行权限

    5、生成CardReaderTester文件

    6、添加程序依赖库

    7、添加Qt相关依赖库(1)将copylib.sh复制到Qt5安装目录的platforms文件夹当中。

    8、软件运行切换到package文件夹下,在当前文件夹下执行./CardReaderTester.sh即可运行软件。


    前言

    主要给Qt开发的程序打包,将程序可以房子啊没有安装Qt开发环境的电脑运行。

    一、在Ubuntu18.04开发环境下打包有两种方式

    1、利用linuxdeployqt软件进行打包

            但是网上说这种方法好像存在弊端,并没有尝试,故不做详细介绍。

            弊端大概就是:不过由于Ubuntu18.04操作系统版本太高,在Ubuntu18.04上需要重新编译linuxdeployqt软件。重新编译的过程需要注释部分不兼容的源码。由于该方式经测试打包依旧无法运行。

    2、利用编写shell脚本的方式进行打包

            这种方法也在的问题:有些依赖库并不能自动包含进来,只能先用脚本打包,再把缺失的库手动拉进来。

    二、详细介绍shell脚本打包的方式

    1、新建一个空的文件夹

    用于存放程序和动态链接库。如“package”文件夹;

    2、准备脚本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
    3、准备脚本xxxx.sh。

    (xxxx.sh表示该脚本名称必须和程序名一致。如:本项目的可执行文件为uidemo01,命名该脚本为CardReaderTester.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. VLC_PLUGIN=$PWD/plugins
    9. echo $VLC_PLUGIN
    10. LD_LIBRARY_PATH=$dirname
    11. export VLC_PLUGIN_PATH=$VLC_PLUGIN
    12. echo $LD_LIBRARY_PATH
    13. export LD_LIBRARY_PATH
    14. $dirname/$appname "$@"

    注意:复制粘贴这些脚本内容时候,有可能会出现格式的问题,但是提示什么错误再修改就好。

    4、给上述两个脚本添加可执行权限

    在shell里面执行如下两行命令:

    sudo chmod 777 copylib.sh
    sudo chmod 777 CardReaderTester.sh

    5、生成CardReaderTester文件

    将qt creator切换为release模式,在编译文件夹下生成CardReaderTester文件。

    6、添加程序依赖库

    (1)首先将该文件复制到package文件夹下。

    (2)在该文件夹下执行./copylib.sh CardReaderTester命令:

    ./copylib.sh CardReaderTester

    (3)执行完后package目录中会生成lib文件夹:

    (4)将lib文件夹下面的库拷贝到package文件夹下面:

    (5)至此完成了添加程序依赖库的部分;

    7、添加Qt相关依赖库
    (1)将copylib.sh复制到Qt5安装目录的platforms文件夹当中。

    (2)在当前文件夹下执行./copylib.sh libqxcb.so命令。

    ./copylib.sh libqxcb.so

    // 执行完这句指令,也会多生成一个lib文件夹

    (3)将lib目录下的库复制到package文件夹下,部分库可能重复,点击“替换”即可。

    (4)接下来返回上一级,将platforms整个文件夹拷贝到package文件夹下。此时的目录结构如下。

    8、软件运行
    切换到package文件夹下,在当前文件夹下执行./CardReaderTester.sh即可运行软件。

    注意:要是运行不成功,会显示缺少哪些库。

    我的项目主要是QWebsoket以及QNetWork相关的库不能正确包含进来,我又从qt的库中把对应的库拷贝过来,才成功了。

  • 相关阅读:
    AI角色对环境信息的感知方式
    (Matalb分类预测)WOA-BP鲸鱼算法优化BP神经网络的多维分类预测
    Scala的集合操作之可变数组和不可变数组,可变List集合与不可变List集合,可变Set与不可变Set操作,可变和不可变Map集合和元组操作
    基于物联网的农村地区智能微电网系统(Simulink)
    计算机毕业设计Java大学生科技创新项目管理系统(源码+系统+mysql数据库+lw文档)
    LeetCode 191. 位1的个数
    力扣(LeetCode)315. 计算右侧小于当前元素的个数(2022.11.12)
    天翼云探索云原生、边缘计算融合新思路
    介绍下官网Redis编程模式
    【3d游戏开发】使用Babylonjs+Vue3搭建属于我们的小岛
  • 原文地址:https://blog.csdn.net/bigger_belief/article/details/134426046
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号