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.pswp.cn/web/41786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41786.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity3D批量修改名稱工具

介紹 該工具用于批量修改某游戲對象的一級子對象名稱,功能包括批量添加前后綴、批量修改公共名稱字段和批量修改為同一名稱,包括撤銷和恢復功能。 批量添加前后綴可使用預設從指定數字遞增或遞減至指定數字。 資源下載 GitHub 百度網盤&#xff08…

水果商城系統 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肯定在當前位置下方;如果當前元素大…

基于深度學習的電力分配

基于深度學習的電力分配是一項利用深度學習算法優化電力系統中的電力資源分配、負荷預測、故障檢測和系統管理的技術。該技術旨在提高電力系統的運行效率、穩定性和可靠性。以下是關于這一領域的系統介紹: 1. 任務和目標 電力分配的主要任務是優化電力系統中的電力…

挑戰杯 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 動態注冊和注銷廣播…

WIN32核心編程 - 線程操作(二) 同步互斥

公開視頻 -> 鏈接點擊跳轉公開課程博客首頁 -> 鏈接點擊跳轉博客主頁 目錄 競態條件 CriticalSection Mutex CriticalSection & Mutex Semaphore Event 競態條件 多線程環境下,當多個線程同時訪問或者修改同一個數據時,最終結果為線程執…

探索企業信用巔峰:3A企業認證的魅力與價值

在現代商業環境中,企業的信用和信譽是其發展的核心要素之一。3A企業認證作為信用評級的最高等級,正在吸引越來越多企業的關注。究竟什么是3A企業認證?它為什么對企業如此重要?本文將深入探討3A企業認證的獨特魅力和巨大價值。 3A企…

0Day漏洞防御篇:GeoServer CVE-2024-36401遠程代碼執行漏洞

GeoServer是一個用Java編寫的開源軟件服務器,允許用戶共享和編輯地理空間數據。它為提供交互操作性而設計,使用開放標準發布來自任何主要空間數據源的數據。GeoServer存在遠程代碼執行漏洞(CVE-2024-36401),未經身份認…

Spring整合SpringSecurity

SpringSecurity基礎使用 SpringSecurity是一個安全框架&#xff0c;主要功能是認證和授權 從Spring入手SpringSecurity 1. Spring整合SpringSecurity applicationContext.xml <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http…

大模型幻覺問題知識點總結

大模型幻覺問題知識點總結 定義&#xff1a; 大模型幻覺問題是指在自然語言處理&#xff08;NLP&#xff09;中&#xff0c;基于大規模預訓練模型&#xff08;如GPT-3、BERT等&#xff09;生成的文本看似合理且連貫&#xff0c;但實際上包含錯誤、不準確或虛假的信息。這種現象…

Aigtek高壓放大器指標有哪些要求和標準

高壓放大器是一類關鍵的電子設備&#xff0c;用于放大電信號并提供強大的輸出。在不同的應用領域&#xff0c;高壓放大器可能有不同的要求和標準。以下是一些常見的高壓放大器指標要求和標準&#xff0c;以確保其性能和可靠性&#xff1a; 1.幅度增益和頻率響應 高壓放大器的主…