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

(xxxx.sh表示该脚本名称必须和程序名一致。如:本项目的可执行文件为uidemo01,命名该脚本为CardReaderTester.sh)

#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
VLC_PLUGIN=$PWD/plugins
echo $VLC_PLUGIN
LD_LIBRARY_PATH=$dirname
export VLC_PLUGIN_PATH=$VLC_PLUGIN
echo $LD_LIBRARY_PATH
export LD_LIBRARY_PATH
$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的库中把对应的库拷贝过来,才成功了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/149255.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ResNet 原论文及原作者讲解

ResNet 论文摘要1. 引入2. 相关工作残差表示快捷连接 3. 深度残差学习3.1. 残差学习3.2. 快捷恒等映射3.3. 网络体系结构普通网络 plain network残差网络 residual network 3.4. 实施 4. 实验4.1. ImageNet分类普通的网络 plain network残差网络 residual network恒等vs.快捷连…

上位机模块之圆形测量,基于halcon的二次开发

夸克网盘可自取。链接:https://pan.quark.cn/s/ac192950e051 //在此之前可以先浏览2篇博客,分别是序列化与反序列化和ROI绘制获取 https://blog.csdn.net/m0_51559565/article/details/134422834 //序列化与反序列化 https://blog.csdn.net/m0_51559565…

创新升级!Coremail邮箱客户端4.0发布

11月8日,2023年世界互联网大会乌镇峰会盛大开幕,同日,“互联网之光”博览会新产品新技术发布(网络安全专场)活动在乌镇互联网国际会展中心B2馆顺利举办,Coremail亮相发布现场,重磅发布Coremail邮…

SDL2 播放音频数据(PCM)

1.简介 这里以常用的视频原始数据PCM数据为例,展示音频的播放。 SDL播放音频的流程如下: 初始化音频子系统:SDL_Init()。设置音频参数:SDL_AudioSpec。设置回调函数:SDL_AudioCallback。打开音频设备:SD…

【解决方案】危化品厂区安防系统EasyCVR+AI智能监控

危化品属于危险、易燃易爆、易中毒行类,一旦在生产运输过程中发生泄漏后果不堪想象,所以危化品的生产储存更需要严密、精细的监控,来保障危化品的安全。EasyCVRTSINGSEE青犀AI智能分析网关搭建的危化品智能监控方案就能很好的为危化品监管保驾…

遍历一个对象,并得出所对应的值

var dates {//定义的对象year:now.getFullYear(),month:now.getMonth()1,date:now.getDate(),hour:now.getHours(),minute:now.getMinutes(),second:now.getSeconds() }//开始遍历循环 var val; for (val in dates){console.log(对象名称:val-对象的值:…

人工智能-深度学习之残差网络(ResNet)

随着我们设计越来越深的网络,深刻理解“新添加的层如何提升神经网络的性能”变得至关重要。更重要的是设计网络的能力,在这种网络中,添加层会使网络更具表现力, 为了取得质的突破,我们需要一些数学基础知识。 ResNet沿…

【坑】idea终端下执行maven命令行报错:mvn clean install -Dspring.profiles.active=dev

直接看报错信息 解决方法 方法一 命令改为:mvn clean install -Dspring.profiles.activedev方法二 使用 cmd 进入命令行执行:mvn clean install -Dspring.profiles.activedev在新版本中的idea终端已经默认使用了类似windons10下的PowerShell窗口的风格…

WorkPlus Meet视频会议系统,可私有化部署,保障内部数据安全

WorkPlus Meet作为一款私有化音视频会议平台,具有高度安全性和部署灵活性,能够根据参会人数进行灵活的调配,这样企业可以有效控制会议成本,避免资源浪费。同时,WorkPlus Meet平台支持多种功能,满足不同场景…

使用naive-ui做一个标签页展示列表

目录 零、引言 一、引入所需组件 二、引入数据 三、使用动态样式控制列表条纹 四、全部代码 五、设计思路 5.1组件设计思路 5.2背景颜色控制思路 5.3说明 六。最终效果 零、引言 有时候我们会有很多数据,分成好几类 每一类都需要展示,那么这时…

没有第一、第二学历之分!成人学历一样可以填补学历空缺

如果你还在纠结成人学历是不是第一学历的问题, 可以来看看官方怎么说。 (图片来源:教育部官网) 请问专升本(非成人高招专升本)毕业后的第一学历是专科还是本科? 学历是指人们在教育机构中接…

vue3 tsx 项目中使用 Antv/G2 实现多线折线图

Antv/G2 文档 Antv/G2 双折线图 安装依赖 项目中安装 antv/g2 依赖库: npm install antv/g2 --save安装成功: 项目使用 新建文件 IndicatorTrend.tsx: import { defineComponent, PropType, onMounted, ref } from vue import { useCh…

uniapp基础学习笔记01

文章目录 本博客根据黑马教程学习uniapp一、技术架构二、创建项目2.1 Hbuilder创建2.2 插件安装2.3 微信开发者工具配置与运行2.3.1 简单修改基础页面 2.4 pages.json和tabBar2.4.1 pages.json与tabBar配置2.4.2 案例 三、uniapp与原生开发的区别 本博客根据黑马教程学习uniapp…

Postman工具简介

介绍 Postman是一个商业的接口测试工具。免费的版本也可以使用不少功能。 官网:https://www.postman.com/ 下载、安装、应用界面 下载 安装、安装成功以后的应用界面 双击下载下来的可执行文件进行安装,出现如下界面: 可以注册一个账…

自动化测试和手工测试有什么不同以及自动化测试和手工测试应用范围的对比

一、初识自动化测试 如果以前没有做过自动化测试,那么就不了解自动化测试,可能会觉得自动化测试比较神秘,但是,我们在日常的计算机操作中,可能会碰到一些自动化处理的过程,这些过程和自动化测试比较接近。 …

EDA实验------数控分频器设计(QuartusII)

目录 一、实验目的 二、实验原理 三、实验内容 四、实验步骤 五、注意事项 六、思考题 七、实验过程 分频器的基本原理 什么是分频器? 如何去分频? 1.创建新项目 2.创建Verilog文件,写入代码 3.连接电路 ​编辑 锁相环的创建 4…

做决策、定战略、带团队:顶级高手常用的16个思维模型

01 做决策 1.沃伦巴菲特的双目标清单系统(Two-List System) 弗林特当了巴菲特的私人飞行员十年之久,还曾为美国四任总统开过飞机,但他在事业上依然有更多追求。有一次,他和巴菲特在探讨他的职业生涯目标时&#xff0…

教你轻轻松松写出10万+的微头条爆文,赶紧收藏!

微头条是投放在今日头条上的稿件,重点在于微字,一般在300-500字之间,讲究的是原创干货,有独到见解。 企业和品牌撰写微头条来给自己带来更多曝光和展现。想要让你的微头条写出爆款内容,这是需要讲究技巧的&#xff0c…

<文件操作及常用的API>

文章目录 专栏导读🚀简单认识一下文件🚀树形结构和目录🚀文件路径-相对路径、绝对路径🚀文件类型🚀Java中文件的操作🚀File 类的常用方法 专栏导读 🚀多线程章节 💐数据结构剖析 &am…

京东账单导出的手工操作

文章目录 京东账单导出的手工操作概述笔记备注END 京东账单导出的手工操作 概述 在京东网页版找不到账单导出的操作. 在手机京东中可以导出账单. 当前京东APP的导出实现有点bug, 在输入验证码后, 发送邮件. 可是显示验证码失败, 但是已经发了邮件. 可能是因为发送成功提示不明…