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命令启动应用程序,可以查看详细的程序加载过程。

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

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

相关文章

水果商城系统 SpringBoot+Vue

1、技术栈 技术栈:SpringBootVueMybatis等使用环境:Windows10 谷歌浏览器开发环境:jdk1.8 Maven mysql Idea 数据库仅供学习参考 【已经答辩过的毕业设计】 项目源码地址 2、功能划分 3、效果演示

化工厂定位的意义?如何有效解决管理难题

化工厂定位是运用于工厂人员定位管理的新技术,这一技术的应用具有特殊的意义,和传统管理模式相比具有很大的区别,那么,你是否清楚化工厂定位的意义,它是如何有效的去解决工厂现存的管理难题呢? 传统化工厂管理到底有哪…

PySide6开发桌面程序,PySide6入门实战(上)

文章目录 系列文章索引一、前期准备1、简介及安装2、PyCharm PySide6环境搭建(1)基础环境(2)配置QT Designer、PyUIC、PyRCC(3)使用pyside6项目(4)资源文件编写与编译 二、QT常用控件…

排序矩阵查找

题目链接 排序矩阵查找 题目描述 注意点 每一行、每一列都按升序排列 解答思路 可以从右上角开始遍历,如果当前元素就等于target,直接返回true;如果当前元素小于target,则target肯定在当前位置下方;如果当前元素大…

挑战杯 LSTM的预测算法 - 股票预测 天气预测 房价预测

0 简介 今天学长向大家介绍LSTM基础 基于LSTM的预测算法 - 股票预测 天气预测 房价预测 这是一个较为新颖的竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 1 基于 Ke…

手机飞行模式是什么意思?3个方法教你如何开启

在现代生活中,手机已经成为我们日常生活中不可或缺的一部分。然而,有时我们需要暂时切断手机的通信功能,比如在飞机上、开会时或需要安静休息的时候。这时候,苹果手机上的“飞行模式”功能就派上了用场。 那么,手机飞…

人脸表情识别Facial Expression Recognition基于Python3和Keras2(TensorFlow后端)

人脸表情识别项目是一个结合了计算机视觉和深度学习技术的高级应用,主要用于分析和理解人类面部表情所传达的情感状态。这样的系统可以用于多种场景,比如情绪分析、用户交互、市场调研、医疗诊断以及人机接口等领域。 一个典型的人脸表情识别项目可以分…

端到端自动驾驶新突破:Nvidia提出全并行PARA-Drive,斩获CVPR挑战赛冠军

论文标题: PARA-Drive: Parallelized Architecture for Real-time Autonomous Driving 论文作者: Xinshuo Weng, Boris Ivanovic, Yan Wang, Yue Wang, Marco Pavone 导读: 本文系统分析了自动驾驶高级架构的设计空间,提出了关…

提升内容分享类营销效果的秘籍大公开

今天有丰富实战经验的“蚓链数字化营销平台”来给大家分享一些能有效提高内容分享类数字化营销方案中用户的参与度和转化率的方法。 创造有价值且引人入胜的内容 一定要让分享的内容实用、有趣或者独特,满足大家的需求和兴趣。多运用生动的故事、案例和数据来支持观…

深入分析 Android BroadcastReceiver (十)(完)

文章目录 深入分析 Android BroadcastReceiver (十)1. 深入理解 Android 广播机制的高级应用与实践1.1 高级应用1.1.1 示例:广播启动服务1.1.2 示例:数据变化通知1.1.3 示例:下载完成通知 1.2 实践建议1.2.1 设置权限1.2.2 动态注册和注销广播…

探索企业信用巅峰:3A企业认证的魅力与价值

在现代商业环境中,企业的信用和信誉是其发展的核心要素之一。3A企业认证作为信用评级的最高等级,正在吸引越来越多企业的关注。究竟什么是3A企业认证?它为什么对企业如此重要?本文将深入探讨3A企业认证的独特魅力和巨大价值。 3A企…

0Day漏洞防御篇:GeoServer CVE-2024-36401远程代码执行漏洞

GeoServer是一个用Java编写的开源软件服务器,允许用户共享和编辑地理空间数据。它为提供交互操作性而设计,使用开放标准发布来自任何主要空间数据源的数据。GeoServer存在远程代码执行漏洞(CVE-2024-36401),未经身份认…

Aigtek高压放大器指标有哪些要求和标准

高压放大器是一类关键的电子设备,用于放大电信号并提供强大的输出。在不同的应用领域,高压放大器可能有不同的要求和标准。以下是一些常见的高压放大器指标要求和标准,以确保其性能和可靠性: 1.幅度增益和频率响应 高压放大器的主…

人大金仓携手中国一汽引领国产数据库行业新浪潮

在国产化政策的推动下,人大金仓携手中国一汽联合开发更贴近汽车产业特定需求的数据库功能和组件。从2023年2月至今,人大金仓已累计部署690套数据库,适配应用系统170个,支撑中国一汽20多个核心系统和重要系统。目前,中国一汽在国内企业数据库国产化替换率遥遥领先。此次合作为国…

猫咪健康新选择!福派斯鲜肉猫粮里的果蔬纤维大揭秘

你们是不是对福派斯鲜肉猫粮中那些丰富的果蔬粗纤维特别好奇呢?🤔 其实,这些看似简单的粗纤维,对猫咪的健康可是大有裨益的! 粗纤维在猫粮中起到多种重要作用,并且对猫咪的健康和消化系统有着显著的影响。以…

乡村振兴指数与其30个原始变量数据(Shp/Dta/Excel格式,2000-2022年)

数据简介:这份数据是我国各地级市乡村振兴指数与其30各原始变量数据并对其进行地图可视化表达。城镇化是当今中国社会经济发展的必由之路。当前我国城镇化处于发展的关键时期,但城镇化发展的加快却是一把双刃剑,为何要如此形容呢?因为当前城…

职升网:一级注册计量师就业方向如何?

首先我们要知道,一级注册计量师可以聘为工程师,可以负责计量基准和标准的量值传递工作。它可以从事一下7个方面的工作: 1.负责制定计量管理制度、工作计划、并组织实施; 2.建设期参与设计工程等计量方面的工作,编制计…

红黑树模拟实现

目录 概念 性质 节点定义 红黑树的插入 完整代码 概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条…

充电桩开源平台,开发流程有图有工具

慧哥充电桩开源平台产品研发流程是确保产品从概念阶段到市场推广阶段的有序进行的关键。以下是对您给出的步骤的详细解释和建议: 设计业务流程: 在这一步,团队需要确定产品的核心功能、目标用户以及如何满足用户需求。进行市场调研,了解竞争…

PostMan Error:Maximum response size reached

一、问题描述 用postman本地测试,restful api接口导出文件,文件大小为190M,服务没问题,总是在导出时,抛出:Error:Maximum response size reached。开始以为是服务相应文件过大或者相应时间超时导致的。其实…