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

news2024/11/24 4:35:01

在这里插入图片描述

简介

  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版本的工具已上传至资源

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

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

相关文章

AutoCAD 2024:计算机辅助设计(CAD)软件中文版

AutoCAD是一款广受全球设计师和工程师欢迎的计算机辅助设计(CAD)软件。自1982年首次推出以来,AutoCAD已经经历了多次迭代和改进,不断提升用户在产品设计、建造和工程领域的工作效率。现在,让我们一起探索AutoCAD 2024的…

MySQL中的存储过程

MySQL中的存储过程 概述 由MySQL5.0 版本开始支持存储过程。 如果在实现用户的某些需求时,需要编写一组复杂的SQL语句才能实现的时候,那么我们就可以将这组复杂的SQL语句集提前编写在数据库中,由JDBC调用来执行这组SQL语句。把编写在数据库…

横向移动如何阻止以及防范?

文章目录 背景总结EDR设备监测 (这里以奇安信网神云锁为例) 背景 今天面试,面试官问到了这一个问题,云主机被getshell了,进行了横向移动,如何进行阻止以及防范?当时回答了两个点:通过防火墙出入站策略设置…

HTX 与 Zebec Protocol 展开深度合作,并将以质押者的身份参与 ZBC Staking

自2023年下半年以来,加密市场始终处于低迷的状态,在刚刚结束的9月,加密行业总融资额创下2021年以来的新低,同时在DeFi领域DEX交易额为318.9亿美元,同样创下2021年1月以来的新低。 对于投资者而言,难以从外生…

Apache DolphinScheduler 3.0.0 升级到 3.1.8 教程

安装部署可参考官网 Version 3.1.8/部署指南/伪集群部署(Pseudo-Cluster)https://dolphinscheduler.apache.org/zh-cn/docs/3.1.8/guide/installation/pseudo-cluster 也可以参考我写贴子 DolphinScheduler 3.0安装及使用-CSDN博客DolphinScheduler 3.0版本的安装教程https:…

微信查分,原来这么简单,老师必看攻略

哈喽,亲爱的老师们!是不是经常为了查找学生的成绩而烦恼呢?别担心,今天我就来给大家分享一个超级实用的教程——在微信里查分!快来一起了解一下吧! 首先,我们要清楚成绩查询页面是什么。一般来说…

成都优优聚是专业美团代运营吗?

成都优优聚是一家专注于美团代运营的公司。作为全国知名的美团代运营服务商,成都优优聚拥有丰富的经验和优秀的团队,为各类商家提供全方位的美团代运营解决方案。 美团作为目前国内最大的O2O平台之一,拥有庞大的用户基础和强大的品牌影响力。…

激光雷达标定板精准识别前方障碍物

商用车自动驾驶率先进入商业化运营阶段,这主要是由于商用车对价格的敏感度更低、B端付费意愿更高,以及场景交通复杂程度较低和政策鼓励等因素。在矿区、港口、干线物流、机场、物流园区等细分场景,高级别自动驾驶正在孕育新市场。其中&#x…

【java学习—八】对象类型转换Casting(1)

文章目录 1. 数据类型转换1.1 基本数据类型的 Casting1.2. 对 Java 对象的强制类型转换(造型)2. 对象类型转换举例 1. 数据类型转换 数据类型转换分为基本数据类型转换和对象类型转换。 1.1 基本数据类型的 Casting (1) 自动类型转换:小的数据类型可以自动转换成…

如果你有一次自驾游的机会,你会如何准备?

常常想来一次说走就走的自驾游,但是光是想想就觉得麻烦的事情好多:漫长的公路缺少娱乐方式、偏僻拗口的景点地名难以导航、不熟悉的城市和道路容易违章…… 也因为如此,让我发现了HUAWEI HiCar这个驾驶人的宝藏! 用HUAWEI HiCar…

value too long for type character varying报错处理

瀚高数据库 目录 环境 症状 问题原因 解决方案 环境 系统平台:N/A 版本:4.5 症状 使用insert into插入数据时出现报错value too long for type character varying 问题原因 458新增NLS_LENGTH_SEMANTICS参数,默认设置为byte。之前版本默认为…

nordic平台SDK包下载地址

nRF5 SDK downloads - nordicsemi.com

消灭指标二义性!提效30%的指标管理如何炼成?

众所周知,「指标」是企业通过数据分析衡量业绩的重要参数。然而,不同部门、不同渠道往往存在不同的使用场景和术语体系。 举个例子: 这是一家知名的服饰品牌,不同平台渠道归属于不同部门管理。 适逢双11大促,老板说&…

Tmux:终端复用器的基本使用(一)

tmux(也称为终端多路复用器)是一个强大的终端工具,旨在提高终端用户的工作效率。它允许用户在一个终端窗口内创建多个会话和窗格,从而轻松地在一个屏幕上同时运行多个终端应用程序。tmux 的目标是将多个终端会话和任务组织在一个简…

基于SSM+Vue的毕业生跟踪调查反馈系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

米哈游、复旦发布,具备感知、大脑、行动的大语言模型“智能体”

ChatGPT等大语言模型展示了前所未有的创造能力,但距AGI(通用人工智能)还有很大的距离,缺少自主决策、记忆存储、规划等拟人化能力。 为了探索大语言模型向AGI演变,进化成超越人类的超级人工智能,米哈游与复…

分治类dp:1017T3

http://cplusoj.com/d/senior/p/SS231017C 感觉可以分治某个区间 [ l , r ] [l,r] [l,r],且他们都是在下面 k k k 已经选的基础上 然后肯定要枚举最大值,最大值越长越好 Hint 1 Hint 2 f ( l , r , k ) f(l, r, k) f(l,r,k) 可以通过枚举 m i d mid…

深入理解强化学习——强化学习智能体的四要素:模型(Model)

分类目录:《深入理解强化学习》总目录 相关文章: 强化学习智能体的四要素:策略(Policy) 强化学习智能体的四要素:收益信号(Revenue Signal) 强化学习智能体的四要素:价…

ubunu 18.04 LTS安装Qt-5.14-2并一起安装Qt Creator

作为初级qt用户,一定下载Qt的.run安装文件。 之前我安装5.15.10版本的源码,安装后一头雾水。 后来,我安装了低一点的版本5.14.2,它含有.run安装文件,比较顺利。 下面记录一下ubunu 18.04 LTS安装Qt-5.14-2并一起安装Q…

基于深度学习的目标检测模型综述

基于深度学习的目标检测模型综述 一 概论目标检测主要挑战评估指标 二 展望 一 概论 目标检测是目标分类的自然延伸,目标分类仅旨在识别图像中的目标。目标检测的目标是检测预定义类的所有实例并通过轴对齐的框提供其在图像中的初略定位。检测器应能够识别所有目标…