惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
SecWiki News
SecWiki News
酷 壳 – CoolShell
酷 壳 – CoolShell
爱范儿
爱范儿
量子位
M
MIT News - Artificial intelligence
GbyAI
GbyAI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
TaoSecurity Blog
TaoSecurity Blog
博客园 - 【当耐特】
H
Heimdal Security Blog
腾讯CDC
The Last Watchdog
The Last Watchdog
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
S
Schneier on Security
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
博客园 - 司徒正美
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
Cybersecurity and Infrastructure Security Agency CISA
S
SegmentFault 最新的问题
大猫的无限游戏
大猫的无限游戏
Application and Cybersecurity Blog
Application and Cybersecurity Blog
F
Full Disclosure
有赞技术团队
有赞技术团队
T
Tailwind CSS Blog
Engineering at Meta
Engineering at Meta
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Threatpost
月光博客
月光博客
A
Arctic Wolf
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
T
Troy Hunt's Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
D
DataBreaches.Net
O
OpenAI News
L
LINUX DO - 最新话题
宝玉的分享
宝玉的分享
小众软件
小众软件
V
Vulnerabilities – Threatpost
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
T
The Exploit Database - CXSecurity.com
Martin Fowler
Martin Fowler
美团技术团队
P
Privacy International News Feed

博客园 - 松山居士

部署Hermes-Agent和SenseNova-Skills ubuntu用root账户启动服务指定脚本 WSL迁移OpenEuler虚拟机 采用Ollama本地布署DeepSeekCoderV2 Loongnix Server 23.2安装Docker及常用镜像 Ollama导出和导入DeepSeek预训练大模型 Win10上模拟LoongArch虚拟机安装Deepin系统 查看exe启动命令和参数 Visual Studio C++设置EXE和DLL在不同路径 JMeter做WEB和API自动化测试 PG数据库常用DDL VSCode+XMake开发环境搭建备忘 C++库管理Conan使用备忘 Python多版本管理Anaconda备忘 Win10上模拟LoongArch虚拟机并搭建Qt5开发环境 解决向日葵无人值守自启动的权限问题 QGIS插件开发备忘 Linux shell 实用命令备忘 WIN10配置FX DocuCentre-IV C2260 PCL6打印机 VMWare虚拟磁盘整理与收缩 解决启用C++17后byte重定义的问题(byte ambiguous ) 解决Deepin安装Flatpak程序时不能创建临时文件的错误
强制去掉Qt的运行环境信息
松山居士 · 2023-02-03 · via 博客园 - 松山居士

基于Qt6开发的应用程序会依赖libQt6Core.so.6,动态库so文件中包含有运行环境信息,包含有运行所需的linux kernel最低版本,可通过objdump工具查看。在Docker环境中,glibc的版本可以用FROM自定义环境,但linux kernel版本只能用宿主机的,就造成Qt6开发的程序在CentOS7等老旧操作系统下的Docker中运行不起来,往往会报(libQt6Core.so.6: cannot open shared object file)的错误信息。解决的方案是去掉so库的.note.ABI-tag。

1、查看.note.ABI-tag

objdump -s -j .note.ABI-tag libQt6Core.so.6

2、去掉.note.ABI-tag

strip --remove-section=.note.ABI-tag libQt6Core.so.6

 

  可以看到处理后的so库已经不包含运行环境信息了,在较老旧的linux上可成功运行。

附:查看程序的elf文件头信息

readelf -S libQt6Core.so.6      #Display the sections' header
readelf -h libQt6Core.so.6      #Display the ELF file header

.note.ABI-tag

每个可执行文件都应包含一个名为.note.ABI-tag的SHT_NOTE类型的节。

本部分的结构为ELF规范中记录的注释部分。该部分必须至少包含以下条目:前面的部分为类型、名称,名称字段包含字符串“ GNU”,数据为单字节类型。后续是 desc 字段,数据为多字节类型,机器采用小字节序(LITTLE-ENDIAN)存储,低位在前,desc字段的第一个64位字必须为0(这表示Linux可执行文件),desc字段的第二、第三和第四64位字包含最早的兼容内核版本。例如上图的3个字分别是3、17和0,则表示最早兼容3.17.0内核。