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[@]}
docp "$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.mzph.cn/news/143958.shtml

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

相关文章

Git目录不对,即当前文件夹不对应git仓库

报错信息是: fatal: not a git repository (or any of the parent directories): .git 如: 是当前文件夹不对应git仓库,一般在git clone之后,需要进入下一级文件夹才对应仓库。 在文件夹看,本层中没有.git文件夹&…

JavaScript的函数的形参与实参是怎么回事

0 写在前面 此文给小白看的,如果不是可以直接关闭 1 讲解 例如JavaScript中定义函数 //定义函数 function 方法名(形参){方法体-->使用形参}//使用函数 方法名字(实参)具体干了什么呢?此处以伪代码举例 //定义函数 function eat(A,B){A 去 B 家吃…

C_9练习题

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) C语言程序中,要使用数学库函数(例sqrt、sin等),需要在程序最前面加上包含文件的预处理命令&#xff08;)。 A. #include <…

解决STM32F429烧录程序后还需复位才能植入程序的bug

1.打开魔术棒&#xff0c;打开debug 2.打开setting 3.打开Flas Download 4.开启Reset and Run 5.点进去Pack选项页面&#xff0c;去掉enable

部署LCM(Latent Consistency Models)实现快速出图

LCM&#xff08;Latent Consistency Models&#xff09;可以通过很少的迭代次数就可以生成高清晰度的图片&#xff0c;目前只可以使用一个模型Dreamshaper_v7&#xff0c;基于SD版本Dreamshaper微调而来的。 LCM模型下载&#xff1a; https://huggingface.co/SimianLuo/LCM_D…

wpr -start generalprofile -start pool -filemode 这句命令具体是什么意思

注意事项&#xff1a; 总体而言&#xff0c;WPR 和 WPA 是强大的性能分析工具&#xff0c;通过它们&#xff0c;你可以深入了解系统运行时的性能特性&#xff0c;找出潜在问题并进行优化。 查看详细信息&#xff1a; wpr -start generalprofile -start pool -filemode 对应的结…

内存泄漏、new、delete

1. 内存泄漏 内存泄漏&#xff1a;指针被销毁&#xff0c;指针指向的空间依旧存在 2. new过程 与内存分配、构造函数有关 1&#xff09;分配空间&#xff1a;void* mem operator new( sizeof( ) )&#xff0c;内部调用malloc 2&#xff09;static_cast<目标类型>(mem) …

快速删除MySQL服务 。

以管理员身份执行终端&#xff0c;输入&#xff1a;sc delete MYSQL&#xff08;这个名字按着自己的来&#xff0c;可能是MYSQL8或者MYSQL5.7&#xff0c;有些时还不需要名字是一样的话&#xff0c;你要看服务名字是什么&#xff09;&#xff0c;就可以把服务中的MYSQL删除了 …

centos 6.10 安装 svn1.14.2

安装 apr 和 apr-util 下载地址 我下载的分别是 apr-1.7.4 和 apr-unit-1.6.3 常规的安装步骤 ./configure --prefix/usr/local/xxx make && make install注意要先安装 apr 再安装 apr-unit-1.6.3 安装 lz4 下载地址 要配置好环境变量&#xff0c;不然可能还是找…

.Net(C#)常用转换byte转uint32、byte转float等

1、byte转String Encoding.ASCII.GetString(byte[]); 2、base64string转byte byte[]Base64Decoder.Decoder.GetDecoded(string); 3、byte转UInt16 方法一 (UInt16)(bytes[0] * 256 bytes[1]) 方法二 (UInt16)((bytes[0] << 8) | bytes[1]); 方法三 字节序要对…

记feign调用第三方接口时header是multipart/form-data

1.请求第三方接口&#xff0c;用feign请求 请求第三方接口&#xff0c;用feign请求&#xff0c;header不通&#xff0c;feign的写法不同 调用时报错Could not write request: no suitable HttpMessageConverter found for request type [com.ccreate.cnpc.mall.dto.zm.ZMPage…

深度学习100例-卷积神经网络(CNN)实现mnist手写数字识别 | 第1天

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3.归一化4.可视化5.调整图片格式 二、构建CNN网络模型三、编译模型四、训练模型五、预测六、知识点详解1. MNIST手写数字数据集介绍2. 神经网络程序说明3. 网…

layui 框架的upload上传文件的data参数传到后端的方法

因为特殊性&#xff0c;upload.render初始化的data:{id:"sss"}不能传参到后台。 经过大量测试及参数网上方法&#xff0c;才发现&#xff0c;需要特殊处理&#xff1a; 1、如果直接给{id:"sss"}无效&#xff0c;但如果在before里&#xff0c;this.data.i…

甲方与三方渗透团队的协作注意点

文章目录 以下是优化后的内容&#xff1a; 作为甲方安全团队主导的渗透攻击&#xff0c;以下几点需要注意&#xff1a; 预备充分 与测试团队协调&#xff0c;提供乙方攻击所需的必要资源&#xff0c;以及具有甲方特色的资源。例如&#xff0c;如果认为自己的权限系统需要重点评…

ChatGLM3-6B:新一代开源双语对话语言模型,流畅对话与低部署门槛再升级

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

sql server 多行数据合并一行显示

在 SQL Server 中&#xff0c;可以使用 STUFF 和 FOR XML PATH 进行多行合并成一行。例如&#xff0c;假设有一个表名为 orders &#xff0c;其中包含订单号和产品名称&#xff1a; order_idproduct_name1Product A1Product B2Product C2Product D 以下查询将在 order_id 列上…

Docker Compose详细教程(从入门到放弃)

对于现代应用来说&#xff0c;大多都是通过很多的微服务互相协同组成的一个完整应用。例如&#xff0c; 订单管理、用户管理、品类管理、缓存服务、数据库服务等&#xff0c;它们构成了一个电商平台的应 用。而部署和管理大量的服务容器是一件非常繁琐的事情。而 Docker Compos…

电机应用-控制系统、PID

控制系统 对生产中某些关键性参数进行自动控制&#xff0c;使它们在受到外界干扰&#xff08;扰动&#xff09;的影响而偏离正常状态时&#xff0c;能够被自动地调节而回到工艺所要求地数值范围内。 自动控制系统分为&#xff1a;开环、闭环。 闭环自动控制系统原理 闭环控制是…

registry镜像仓库通过HTTP API删除镜像

registry组件提供了HTTP的接口&#xff0c;可以参考&#xff1a;官网API说明 删除思路&#xff1a; 镜像由多个layers层组成&#xff0c;DELETE /v2/<name>/blobs/<digest>可以用来删除一个单独的层&#xff0c;但是我们的目的不是要删除层。 我们用DELETE /v2/…

wpf devexpress post 更改数据库

这个教程示范如何使用GridControl编辑数据&#xff0c;和保存更改到数据库。这个教程基于前一个篇。 Items Source Wizard 当 CRUD (Create, Read, Update, Delete) 启动选项时添加Post data功能 Items Source Wizard 生成如下代码&#xff1a; 1、设置 TableView.ShowUpdat…