Linux下QT程序启动失败问题排查方法

文章目录

      • 0.问题背景
      • 1.程序启动失败常见原因
      • 2.排查依赖库问题
        • 2.1 依赖库缺失
        • 2.2 依赖库加载路径错误
        • 2.3 依赖库版本不匹配
        • 2.4 QT插件库缺失
          • 2.4.1 QT插件库缺失
          • 2.4.2 插件库自身的依赖库缺失
        • 2.5 系统基础C库不匹配
      • 3.资源问题
        • 3.1 缺少翻译文件
        • 3.2 缺少依赖的资源文件
        • 3.3 缺少依赖的可执行程序
      • 4.程序权限问题
      • 5.运行崩溃问题

0.问题背景

在当前的主流开发语言中Java和web都有成熟的包依赖管理工具,能够轻松的管理程序依赖,然而C++目前仅仅只有像vcpkg和conan这样的开源库构建工具,并没有程序依赖库管理工具。在Linux系统软硬件如此丰富的今天,想一个C++程序能够兼容多个操作系统,是一件很有挑战的事情。下面文章中将要讲到的是平时在实践过程中遇到的一些问题的总结分享,希望能给读者一些启发。

1.程序启动失败常见原因

Linux下程序启动失败的原因主要有几个原因,下面将从每个原因进行具体的分析。

请添加图片描述

2.排查依赖库问题

2.1 依赖库缺失

通过ldd命令查看依赖库问题的正确步骤,第一步先确认可执行程序的依赖库是否缺失,如果缺失查看缺失依赖库自身的依赖库是否正常,通过一层层查询,基本能定位缺失的依赖库问题。

#查看可执行程序依赖库示例
ldd -d example

#查看动态库的依赖库
ldd -d libQt5Gui.so

请添加图片描述
依赖库缺失示例:
请添加图片描述

2.2 依赖库加载路径错误

因为windows和Linux系统机制的问题,Linux默认从系统路径加载动态库,这导致程序启动时加载的不是当前路径下的动态库,如果版本不匹配就会出现程序启动失败。解决这个问题的办法有两个:1.编译动态库时指定需要链接动态库的相对路径;2.通过pathelf命令修改动态库的运行时路径。

2.3 依赖库版本不匹配

依赖库版本不匹配的情况一般有两种情况,第一种动态库编译环境编译时依赖的动态库版本和运行环境中依赖的库版本不同,这就导致运行时库版本不匹配,最常见的问题像libicui18n.so、libicudata.so、libssl等。

请添加图片描述

2.4 QT插件库缺失

QT自带插件是在使用特定模块时必须依赖的动态库,在发布程序时必须一起发布,但是因为我们在开发阶段因为开发环境的的问题很容易忽视这个问题,导致在纯净环境部署时出现程序因为缺少必须的插件库而无法运行。

请添加图片描述

2.4.1 QT插件库缺失

解决QT插件库缺失的两种方法,第一种利用经验根据自己使用到的板块拷贝对应的插件到发布目录;第二种方法利用开源工具linuxdeployqt自动拷贝所有依赖的Qt环境到发布目录。

2.4.2 插件库自身的依赖库缺失

QT插件库很多是依赖系统库的,比较典型的是libqxcb.so依赖libxcb-xinput.so,很多系统没有这个依赖环境,因此在打包时我们需要将这个系统依赖库放到我们发布目录进行一起发布。

2.5 系统基础C库不匹配

当我们使用高版本的gcc编译器编译程序在低版本的gcc系统中运行时很容易出现C库找不到的问题,主要是因为使用高版本gcc进行编译时会引入高版本c库的函数,而在低gcc环境上是没有这些函数的,这就导致程序找不到依赖的c库的接口而无法启动。

3.资源问题

3.1 缺少翻译文件

Qt的QWebEngine模块强依赖翻译文件,在缺失翻译文件时程序直接启动失败。解决办法需要将QT安装目录下的translations文件夹放到发布目录的根目录,尤其是其中的qtwebengine_locales文件夹一定不能少。

3.2 缺少依赖的资源文件

Qt的QWebEngine模块强依赖翻译资源文件,在缺失资源文件时程序直接启动失败。解决办法是将QT安装目录下的resources文件夹放到发布目录的根目录。

3.3 缺少依赖的可执行程序

Qt的QWebEngine模块依赖QtWebEngineProcess进程和qwebengine_convert_dict可执行程序,缺少这两个文件程序将无法启动。QtWebEngineProcess是chromium内核的独立进程,为了避免chromium内核崩溃导致主进程崩溃QT设计人员将其独立成了一个单独的进程,所以这个在做嵌入网页的功能时是必不可少的。

4.程序权限问题

权限问题是linux下非常常见的问题,主要有两种操作可能出现权限问题,第一种我们的软件安装是是非root权限安装的软件,第二种是我们替换软件目录的可执行程序导致可执行无运行权限。对于第一种我们只能卸载重装使用有root权限的账号进行安装,第二种情况我们可以使用chmod命令修改权限即可。

5.运行崩溃问题

程序启动运行崩溃看起来像程序运行不起来,这是程序本身代码的问题,有两种方法可以进行排查。第一种拿到程序崩溃生成的core文件使用gdb查看调用栈进行分析,第二种通过strace命令启动应用程序,可以查看详细的程序加载过程。

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

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

相关文章

视频融合共享平台LntonCVS视频监控汇聚平台工业视频监控系统

LntonCVS是一款功能强大、灵活部署的安防视频监控平台,具备广泛的扩展性和视频能力。它支持多种主流标准协议,如国标GB28181、RTSP/Onvif、RTMP,同时还能兼容厂家的私有协议和SDK,如海康Ehome、海大宇等。除了传统的安防监控功能外…

基于51单片机的四路抢答器Protues仿真设计

一、设计背景 近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。本文阐述了基于51单片机的八路抢答器设计。本设计中,51单片机充当了核心控制器的角色,通过IO口与各个功能模块相连接。按键模块负责检测参与者的抢答动作&#xff0c…

ExcelVBA运用Excel的【条件格式】(二)

ExcelVBA运用Excel的【条件格式】(二) 前面知识点回顾 1. 访问 FormatConditions 集合 Range.FormatConditions 2. 添加条件格式 FormatConditions.Add 方法 语法 表达式。添加 (类型、 运算符、 Expression1、 Expression2) 3. 修改或删除条件…

【数据结构】线性表----栈详解

栈 栈(Stack)是一种常见的数据结构,它具有**后进先出(Last In, First Out, LIFO)**的特点。栈的运作类似于物理世界中的叠盘子:最新放上去的盘子最先被拿走,而最底部的盘子最后才能被取出。 如…

企业文档加密软件推荐丨2024企业用什么加密软件

在数字化时代,信息安全已经成为企业和个人不可忽视的问题。文档加密软件作为一种保护敏感信息不被非法访问或篡改的有效工具,其重要性日益凸显。通过加密技术,可以确保文档内容在传输和存储过程中的安全性,防止数据泄露和未经授权…

谷粒商城学习笔记-使用renren-fast-vue框架时安装依赖包遇到的问题及解决策略

文章目录 1,npm error Class extends value undefined is not a constuctor or null2,npm warn cli npm v10.8.1 does not support Node.js v16.20.2.3,npm error code CERT_HAS_EXPIRED学习心得 这篇文章记录下使用renren-fast-vue&#xff…

Spring Boot:连接MySQL错误Public Key Retrieval is not allowed

环境: MySQL版本:8.0.17 SpringBoot版本:2.5.15 解决 解决方式很简单,在数据库配置连接字符串spring.datasource.url末尾添加&allowPublicKeyRetrievaltrue即可,如下图: 重新启动,恢复正常…

Ai Native应用开发(一)--数字人

背景 刚参加完24年世界人工智能大会(WAIC),聊聊自己的一些感受。这次会明显比去年多很多人,用人山人海来形容应该也不为过。根据我自己粗浅观察参会的人员也比去年更多样化。去年更多还是从业者或者是这块研究人员。今年每个论坛…

Pytorch实战(二):VGG神经网络

文章目录 一、诞生背景二、VGG网络结构2.1VGG块2.2网络运行流程2.3总结 三、实战3.1搭建模型3.2模型训练3.3训练结果可视化3.4模型参数初始化 一、诞生背景 从网络结构中可看出,所有版本VGG均全部使用33大小、步长为1的小卷积核,33卷积核同时也是最小的能…

Linux网络配置管理

目录 一、网络配置 1. 网卡配置 2. 路由 二、 网络信息查看 1.netstat 2. ss 三、 额外的命令 time 一、网络配置 之前我们学过 ifconfig ,这个命令可以查看网络接口的地址配置信息,我们只知道它可以查看接口名称、IP 地址、子网掩码等。 但是&a…

java —— tomcat 部署项目

一、通过 war 包部署 1、将项目导出为 war 包; 2、将 war 包放置在 tomcat 目录下的 webapps 文件夹下,该 war 包稍时便自动解析为项目文件夹; 3、启动 tomcat 的 /bin 目录下的 startup.bat 文件,此时即可从浏览器访问项目首页…

windows 11 + kali wsl二合一配置步骤与踩坑

windows 11 kali wsl二合一配置步骤与踩坑 在前几天的某市攻防演练中,在攻防前期,我的虚拟机经常无缘无故出现断网、卡顿等现象,但找不出原因。 为了不影响后续的这些天的攻防演练,我选择在一个晚上通宵 在我的windows 11系统上…

2.作业2

目录 1.作业题目 A图 B代码 2.css盒子模型 0.css盒子模型 1.外边距(margin) 2.边框(border) 3.内边距(padding) ​编辑 3.GET方法与POST方法的区别 学习产出: html的作业 1.作业题目 A图…

无向图中寻找指定路径:深度优先遍历算法

刷题记录 1. 节点依赖 背景: 类似于无向图中, 寻找从 起始节点 --> 目标节点 的 线路. 需求: 现在需要从 起始节点 A, 找到所有到 终点 H 的所有路径 A – B : 路径由一个对象构成 public class NodeAssociation {private String leftNodeName;private Stri…

文华财经盘立方期货通鳄鱼指标公式均线交易策略源码

文华财经盘立方期货通鳄鱼指标公式均线交易策略源码: 新建主图幅图类型指标都可以! VAR1:(HL)/2; 唇:REF(SMA(VAR1,5,1),3),COLORGREEN; 齿:REF(SMA(VAR1,8,1),5),COLORRED; 颚:REF(SMA(VAR1,13,1),8),COLORBLUE;

离线查询+线段树,CF522D - Closest Equals

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 522D - Closest Equals 二、解题报告 1、思路分析 考虑查询区间已经给出,我们可以离线查询 对于这类区间离线查询的问题我们通常可以通过左端点排序,然后遍历询问同时维护左区间信息…

数据泄露态势(2024年5月)

监控说明:以下数据由零零信安0.zone安全开源情报系统提供,该系统监控范围包括约10万个明网、深网、暗网、匿名社交社群威胁源。在进行抽样事件分析时,涉及到我国的数据不会选取任何政府、安全与公共事务的事件进行分析。如遇到影响较大的伪造…

《金山 WPS AI 2.0:重塑办公未来的智能引擎》

AITOP100平台获悉,在 2024 世界人工智能大会这一科技盛宴上,金山办公以其前瞻性的视野和创新的技术,正式发布了 WPS AI 2.0,犹如一颗璀璨的星辰,照亮了智能办公的新征程,同时首次公开的金山政务办公模型 1.…

支持图片识别语音输入的LobeChat保姆级本地部署流程

文章目录 前言1. LobeChat对我们有哪些帮助?2. 本地安装LobeChat3. 如何使用LobeChat工具4. 安装Cpolar内网穿透5. 实现公网访问LobeChat6. 固定LobeChat公网地址 前言 本文主要介绍如何在Windows系统电脑本地部署LobeChat,一款高颜值的开源AI大模型智能应用&…