如何修改已有.so使其依赖另一.so并被ldd识别,该关联专业名称是什么
问题1解答:修改已有的a.so添加b.so依赖的方法
- 方案1:持有a.so源码的场景
重新编译a.so时,在链接阶段明确添加b.so的链接参数即可,示例编译命令如下:
gcc -shared -fPIC a.c -o a.so -L /path/to/b.so所在目录 -lb -Wl,-rpath=/path/to/b.so所在目录
编译完成后a.so的动态段会自动写入b.so的依赖记录,ldd即可识别该关联。
- 方案2:仅持有a.so二进制文件的场景
使用第三方工具patchelf直接修改a.so的ELF结构,添加对应依赖记录即可,操作命令如下:
# 先安装patchelf:Debian/Ubuntu执行apt install patchelf,RHEL/CentOS执行yum install patchelf patchelf --add-needed b.so a.so # 如果b.so不在系统默认动态库查找路径中,可同时添加运行时查找路径 patchelf --set-rpath /path/to/b.so所在目录 a.so
修改完成后执行ldd a.so即可看到b.so的依赖解析条目。
问题2解答:该链接关联的专业术语
ldd展示的动态库关联记录,读取的是ELF格式文件中.dynamic段存储的DT_NEEDED类型条目,中文正式术语为动态共享库依赖,也可称为运行时共享库依赖、显式动态链接依赖。
内容的提问来源于stack exchange,提问作者KJ7LNW
相关产品推荐
相关产品推荐

