当前位置: 首页 > news >正文

【Qt高阶】Linux安装了多个版本的Qt 部署Qt程序,出包【2023.10.17】

在这里插入图片描述

简介

  linux系统下可执行程序运行时会加载一些动态库so,有一些是Qt的库,Qt的库会加载其他更基础的库。最后出包的时候需要把依赖的包整理到一个文件夹,来制作安装包。近期遇到已经将依赖的so文件拷贝至程序目录下,但还是调系统路径下的动态库的问题。对问题排查过程中的技术手段进行整理备忘。

排查用到的命令工具

(1)ldd 命令

对一个Qt 窗口程序testDependSo进行ldd查看依赖的库,发现会依赖到系统路径/lib/usr/lib/,也会依赖到Qt安装路径下的库 /home/myb/Qt5.6.3/5.6.3/gcc_64/lib/0x00007f52b9427000 这个十六进制数字是 ldd 输出中各动态库的加载的基地址。

myb@myb-kylinV10:~/build-testDependSo-Desktop_Qt_5_6_3_GCC_64bit-Debug$ ldd testDependSo linux-vdso.so.1 =>  (0x00007fff635d8000)libQt5Widgets.so.5 => /home/myb/Qt5.6.3/5.6.3/gcc_64/lib/libQt5Widgets.so.5 (0x00007f857069b000)libQt5Core.so.5 => /home/myb/Qt5.6.3/5.6.3/gcc_64/lib/libQt5Core.so.5 (0x00007f856ff81000)libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f856fbff000)libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f856f9e9000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f856f61f000)libQt5Gui.so.5 => /home/myb/Qt5.6.3/5.6.3/gcc_64/lib/libQt5Gui.so.5 (0x00007f856ee2a000)libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f856ec0d000)libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f856e9ba000)libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f856e7b8000)librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f856e5b0000)libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f856e29f000)libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f856e08d000)libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f856dd53000)libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f856dadf000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f856d7d6000)libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f856d5bc000)libicui18n.so.56 => /home/myb/Qt5.6.3/5.6.3/gcc_64/lib/libicui18n.so.56 (0x00007f856d122000)libicuuc.so.56 => /home/myb/Qt5.6.3/5.6.3/gcc_64/lib/libicuuc.so.56 (0x00007f856cd6a000)libicudata.so.56 => /home/myb/Qt5.6.3/5.6.3/gcc_64/lib/libicudata.so.56 (0x00007f856b387000)libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f856b183000)/lib64/ld-linux-x86-64.so.2 (0x00007f8570f15000)libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f856af7b000)libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f856ad0b000)libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f856aae9000)libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f856a8c0000)libxcb-dri3.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0 (0x00007f856a6bd000)libxcb-present.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-present.so.0 (0x00007f856a4ba000)libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007f856a2b3000)libxshmfence.so.1 => /usr/lib/x86_64-linux-gnu/libxshmfence.so.1 (0x00007f856a0b1000)libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0 (0x00007f8569e80000)libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007f8569c7d000)libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f8569a77000)libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f8569875000)libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007f856965c000)libxcb-dri2.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0 (0x00007f8569457000)libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f8569251000)libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f8569040000)libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f8568e3c000)libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f8568c36000)

(2)chrpath -c application,这个命令是查看程序的RPATHRPATH就是指定程序运行时从哪个路径加载依赖的动态库。如下代表程序依赖的库是在Qt的安装目录。

myb@myb-kylinV10:~/build-testDependSo-Desktop_Qt_5_6_3_GCC_64bit-Debug$ chrpath -c testDependSo 
testDependSo: RPATH converted to RUNPATH
testDependSo: RUNPATH=/home/myb/Qt5.6.3/5.6.3/gcc_64/lib

(3) chrpath(change run path),改变运行库的查找位置。下面的命令将运行库的查找位置改为可执行程序目录下的lib目录。

myb@myb-kylinV10:~/build-testDependSo-Desktop_Qt_5_6_3_GCC_64bit-Debug$ chrpath -r $ORIGIN/lib

linuxdeployqt 工具(个性化修改针对安装多个版本的QT版本)

(1)找到自己的qmake程序的安装路径,将路径写到linuxdeployqt目录下的qmakePath.txt文件中。

(2)执行命令:

./linuxdeployqt MyApp -appimage

KylinV10 X86版本的工具已上传至资源

相关文章:

【Qt高阶】Linux安装了多个版本的Qt 部署Qt程序,出包【2023.10.17】

简介 linux系统下可执行程序运行时会加载一些动态库so,有一些是Qt的库,Qt的库会加载其他更基础的库。最后出包的时候需要把依赖的包整理到一个文件夹,来制作安装包。近期遇到已经将依赖的so文件拷贝至程序目录下,但还是调系统路径…...

OpenGL简介

OpenGL 本身并不是一个 API,它仅仅是一个由 Khronos组织 制定并维护的规范(Specification)。规范严格规定了每个函数该如何执行,以及它们的输出值。至于内部具体每个函数是如何实现的,将由 OpenGL 库的开发者自行决定。…...

持续集成工具jenkins操作

安装Jenkins 下载jenkins安装包 linux上下载jenkins失败 开始在windows上安装jenkins 1、先安装JDK https://jingyan.baidu.com/article/fdbd4277dd90f0b89e3f489f.html 免安装版本JDK只需要解压配置环境变量即可 2、安装Jenkins 参考文档: https://www.cnb…...

使用BurpSuite抓取HTTPS接口

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 原因设置方式 原因 BurpSuite之所以不能抓取https数据包,是因为BurpSuite作为中间人代理,我们和https网站之间的数据通信都是由BurpSuite来…...

移动硬盘被格式化了如何恢复数据?四步教你如何恢复

在日常生活中,我们常常会使用各种存储设备来保存和备份我们的重要数据。移动硬盘作为一种便携式的存储设备,被广泛应用于数据的存储和传输。然而,有时候我们会不小心将移动硬盘格式化,从而丢失了里面的数据。本文将介绍移动硬盘格…...

基于变电站自动化系统中的安全措施分析及应用

摘要:阐述变电运行中的问题,电气自动化系统与安全运行措施,包括自动控制设备的投入,电气自动 化与计算机技术相、设备数据的采集与处理、自动化系统的升级、人工智能技术的应用。 关键词:自动控制;数据采…...

18、监测数据采集物联网应用开发步骤(12.3)

阶段性源码下载 监测数据采集物联网应用开发步骤(12.2) 前端web UI开发 demo 核心代码文件: web/index.html web/index.js web/js/common.js web/init.dlls Web/init.js 程序运行之后在浏览器敲入如下内容访问数据接口: http://localhost:9000…...

什么是Mybatis?Mybaits有哪些优点?

MyBatis是一个开源的Java持久层框架,它可以将Java对象映射到关系型数据库中,同时提供了灵活、高效、易用的数据访问解决方案。 下面是对MyBatis的详细介绍: 1、SQL映射文件 MyBatis使用简单的XML文件或注解配置文件将Java对象映射到数据库…...

点云从入门到精通技术详解100篇-基于3D点云的曲面文字检测(续)

目录 3.2.3 手动特征提取 3.2.4 基于图绘制的 2D 网格平面生成 3.2.5 特征融合的多通道伪图像生成...

用 Java 在 PDF 中创建和管理图层,实现交互式文档

PDF 图层(也称为可见图层或附加图层等)是组织和管理 PDF 文档中内容可见性的一种方法。PDF 图层可用于创建交互式文档、隐藏或显示特定信息、创建多语言版本文档等。通过添加和删除图层,用户可以根据需要定制 PDF 文档指定内容的可见性与显示…...

公司oa是什么?一般公司oa有什么样功能?

公司OA(Office Automation)是指通过计算机和信息技术来实现办公自动化的系统。 它提供了一系列的功能和工具,用于协调、管理和处理公司内部的日常事务和流程。OA系统旨在提高工作效率、加强信息交流与共享、简化业务流程,并提供便…...

pytorch里面的 nn.Parameter 和 tensor有哪些异同点

简单来说,你可以把tensor看作是一个通用的数据结构,而nn.Parameter看作是一种特殊的tensor,这种tensor可以被优化以提高模型的性能。在创建模型参数时,你应该使用nn.Parameter而不是直接使用tensor,因为这样可以确保模…...

leetcode 37. 解数独

编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 数独部分…...

GIT 分支管理办法

GIT 分支管理办法 一. 大型项目分支管理中存在的痛点 大型项目中需求的上线存在很大的不确定性,而且往往存在多版本、多团队、多开发并行的情况。尤其是大型企业对上线分支中编号的管理十分严苛,严禁夹带上线。这时对于开发而言,没有一个好…...

网络代理的多重应用与安全保障

随着互联网的迅速发展,网络代理技术日益受到关注,并在各个领域展现出重要作用。本文将深入探讨Socks5代理、IP代理以及它们在网络安全、爬虫应用和HTTP协议中的多重应用,帮助读者更好地理解和应用这些关键技术。 1. Socks5代理与SK5代理的异…...

C51--简易报警器设计

硬件清单: C52单片机 震动传感器模块 433M无线发射接受模块 继电器模块 高功率喇叭 杜邦线 振动传感器控制灯: 如何知道是否发生震动?震动后的信号表示又是什么? 振动传感器模块产生震动,输出低电平,绿色指…...

2023年最新全国各省行政区划数据(省-市-区县-乡镇-村)

背景 现实情况,在信息系统开发、电子商务平台、app等等相关软件开发,都会设计到行政区数据联动,这里已经爬好全国各省行政区划数据可供下载。 数据来源 内容为2023年全国统计用区划代码(12位)和城乡分类代码&#xff…...

html5 web 按钮跳转方法(及其相关)

html5 web 按钮跳转方法&#xff08;及其相关&#xff09; 方法一 <a href"javascript:" οnclick"history.go(-2); ">返回前两页</a> 方法二 <a href"javascript:" οnclick"self.locationdocument.referrer;">返…...

ES6 Generator 函数

Generator 函数是 ES6 提供的一种异步编程解决方案&#xff0c;语法行为与传统函数完全不同。 形式上&#xff0c;Generator 函数是一个普通函数&#xff0c;但是有两个特征。一是&#xff0c;function关键字与函数名之间有一个星号&#xff1b;二是&#xff0c;函数体内部使用…...

从零开始探索C语言(十二)----预处理器、输入输出及文件读写

文章目录 1. 预处理器1.1 预处理器实例1.2 预定义宏1.3 预处理器运算符1.4 参数化的宏 2. 输入和输出2.1 getchar() & putchar() 函数2.2 gets() & puts() 函数 3. 文件读写3.1 打开文件3.2 关闭文件3.3 写入文件3.4 读取文件3.5 二进制 I/O 函数 4. typedef 和 #defin…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...