基于Qt6开发的应用程序会依赖libQt6Core.so.6,动态库so文件中包含有运行环境信息,包含有运行所需的linux kernel最低版本,可通过objdump工具查看。在Docker环境中,glibc的版本可以用FROM自定义环境,但linux kernel版本只能用宿主机的,就造成Qt6开发的程序在Cent7等老旧操作系统下的Docker中运行不起来,往往会报(libQt6Core.so.6: cannot open shared object file)的错误信息。解决的方案是去掉so库的ABI-tag。
1、查看ABI-tag
objdump -s -j .note.ABI-tag libQt6Core.so.6
2、去掉ABI-tag
strip --remove-section=.note.ABI-tag libQt6Core.so.6
可以看到处理后的so库已经不包含运行环境信息了,在较老旧的linux上可成功运行。
附:查看程序的elf文件头信息
readelf -S libQt6Core.so.6
标签:Qt,ABI,libQt6Core,tag,so.6,linux,强制,去掉,运行 From: https://www.cnblogs.com/airscrat/p/17088221.html