Ubuntu18.04平台下Qt开发程序打包的一些问题总结

news2024/11/24 5:42:47

目录

前言

一、在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的库中把对应的库拷贝过来,才成功了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Behave介绍和快速示例

Behave是一个用于行为驱动开发 (Behavior-Driven Development, BDD) 的 Python 库。使用 Behave,可以编写自然语言格式的使用场景来描述软件的行为,然后用 Python 实现这些场景下的步骤,形成可直接运行的测试。 Behave的目标是帮助用户、开发…

【Machine Learning in R - Next Generation • mlr3】

本篇主要介绍mlr3包的基本使用。 一个简单的机器学习流程在mlr3中可被分解为以下几个部分: 创建任务 比如回归、分裂、生存分析、降维、密度任务等等挑选学习器(算法/模型) 比如随机森林、决策树、SVM、KNN等等训练和预测 创建任务 本次示…

JVM——类加载器(JDK8及之前,双亲委派机制)

目录 1.类加载器的分类1.实现方式分类1.虚拟机底层实现2.JDK中默认提供或者自定义 2.类加载器的分类-启动类加载器3.类加载器的分类-Java中的默认类加载器4.类加载器的分类-扩展类加载器5.类加载器的分类-类加载器的继承 2.类加载器的双亲委派机制 类加载器(ClassLo…

Vue3.3 + Vite4.3 + TypeScript5+ Element-Plus:从零到一构建企业级后台管理系统(前后端开源)

vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 Element Plus 版本的后台管理前端解决方案,技术栈为 Vue3 Vite4 TypeScript Element Plus Pinia Vue Router 等当前主流框架。 相较于其他管理前端框架,vue3-element-admin 的优势在于一…

笔记本配USB拓展坞网卡经常时不时掉线

ThinkPad X1 Carbon大概是2015年的老笔记本,自己买的USB3.0拓展坞(带网卡)的,我的笔记本不带网卡, 使用网线时不时右下角显网络掉线 , 就掉了,各种排查排除,不是线,路由器,拓展坞问题,最后更新拓展坞网卡芯片驱动,解决问题.下面是步骤: 搜索关键字:Realtek USB GbE Family Cont…

OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)

文章目录 OpenCV的色彩空间——RGB与BGROpenCV的色彩空间——HSV与HSLHSV主要用于OpenCV中HSL OpenCV色彩空间转换YUV主要用于视频中题目 图像操作的基石Numpy【基础操作】np.arraynp.zerosnp.onesnp.fullnp.identitynp.eye Numpy基本操作之矩阵的检索与赋值Numpy基本操作三——…

c# - - - Application.StartupPath(程序安装目录)和Environment.CurrentDirectory(程序工作目录)

Application.StartupPath 应用程序的安装目录,不会改变。 在C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug目录中,运行ConsoleApp6.exe。 安装目录为:C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug 在C:\Users…

Git相关: 拉取、git push提交 过程遇到的错误

目录 解决git push报错error: RPC failed; HTTP 413 curl 22 关于这个问题,其实千万别用gitlab,因为你怎么推送 也不可能把几G的文件推上去。 error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 se 解决git push报错error: RPC failed;…

【外汇天眼】解析外汇交易平台:深度了解DD与NDD两大模式

外汇交易平台种类繁多,涵盖不同的分类与运营模式,令投资者难以甄别,也增加了选择的难度。为了解决这一问题,我们将更深入地了解外汇平台的多样性。 在线外汇交易平台主要分为两大类:处理平台模式(Dealing …

springcloud仓库管理系统源码

开发技术: jdk1.8,mysql5.7,idea,nodejs,vscode springcloud springboot mybatis vue elementui 功能介绍: 统计分析:查看产品,销售数量;统计近7日出入库统计 客户管…

RHCE8 资料整理(六)

RHCE8 资料整理 第 6 篇 软件管理第 23 章 用rpm管理软件23.1 rpm查询23.2 rpm卸载23.3 软件包升级23.4 rpm验证 第 24 章 用yum/dnf管理软件包24.1 yum架构介绍24.2 用光盘搭建yum源24.3 创建私有仓库24.4 yum客户端配置24.5 yum基本使用24.5.1 查询24.5.2 安装与卸载24.5.3 下…

ETL数据转换工具类型与适用场景

ETL数据转换工具在企业数据管理中扮演着重要的角色,能够帮助企业从多个数据源中提取、转换和加载数据,实现数据整合和分析。以下是针对Kettle、DataX和ETLCloud这几个工具的详细介绍及其适用场景。 Kettle(Pentaho Data Integration&#xf…

提高生存能力的7个关键技巧!

作为一款备受热议和玩家喜爱的多人在线射击游戏,《绝地求生》中生存能力的提高是取得胜利的关键。在这篇实用干货分享中,我们将详细说明7个关键技巧,帮助你在游戏中提高生存能力,获得更多胜利。 1.选择降落点:选择适合…

【Azure 架构师学习笔记】-Azure Storage Account(6)- File Layer

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account(5)- Data Lake layers 前言 上一文介绍了存储帐户的概述,还有container的一些配置,在…

【C++】深拷贝与浅拷贝

1、深拷贝与浅拷贝 当我们对复杂类型(结构体或者类)的对象进行初始化时,如果将同类型的对象A赋值给同类型的对象B,此时就涉及深拷贝和浅拷贝的问题。 浅拷贝:简单的赋值拷贝操作。把类/结构体的对象的属性原封不动的赋值给另一个同类型的对…

数据库进阶教学——索引

目录 一、索引概述 1、介绍 2、演示 3、优缺点 二、索引结构 1、B树 2、Hash 三、索引分类 四、索引语法 1、语法 2、示例 五、SQL性能分析 1、SQL执行频率 2、慢查询日志 3、profile详情 4、explain执行计划 六、索引使用 七、索引设计原则 一、索引概述 …

【android】install android NDK

目录 1 下载NDK 2 解压 3 android-ndk的配置 1 下载NDK 下载网址:NDK 下载 | Android NDK | Android Developers 如果没有所需要的版本,则点击页面下面 不受支持的 NDK 下载需要的版本。 2 解压 将压缩文件(例如 android-ndk-r25c-…

Hoppscotch:开源 API 开发工具,快捷实用 | 开源日报 No.77

hoppscotch/hoppscotch Stars: 56.1k License: MIT Hoppscotch 是一个开源的 API 开发生态系统,主要功能包括发送请求和获取实时响应。该项目具有以下核心优势: 轻量级:采用简约的 UI 设计。快速:实时发送请求并获得响应。支持多…

【机器学习基础】多元线性回归(适合初学者的保姆级文章)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐: 【机器学习基础】机器学习入门(1) 【机器学习基…

知虾数据分析软件:了解知虾数据分析软件提升Shopee店铺运营效果

在如今电商竞争激烈的市场中,了解市场趋势和产品数据是成功经营一家Shopee店铺的重要因素之一。而知虾——Shopee生意参谋作为一款功能强大的数据分析软件,可以帮助店主深入了解行业概况、产品潜力以及市场趋势,从而制定最优的运营策略。本文…