当动态库运行环境的依赖与动态库自身的依赖项名字、版本等不匹配时,可使用patchelf来修改动态库的依赖等。
help 文案
~$ patchelf -h
syntax: patchelf
[--set-interpreter FILENAME]
[--page-size SIZE]
[--print-interpreter]
[--print-soname] Prints 'DT_SONAME' entry of .dynamic section. Raises an error if DT_SONAME doesn't exist
[--set-soname SONAME] Sets 'DT_SONAME' entry to SONAME.
[--set-rpath RPATH]
[--remove-rpath]
[--shrink-rpath]
[--print-rpath]
[--force-rpath]
[--add-needed LIBRARY]
[--remove-needed LIBRARY]
[--replace-needed LIBRARY NEW_LIBRARY]
[--print-needed]
[--no-default-lib]
[--debug]
[--version]
FILENAME
1、安装patchelf
sudo apt-get update
sudo apt-get install patchelf
2、查看当前依赖
linux下随机选择 so 查看,其依赖如下:
~$ patchelf --print-needed module-cli.so
libpulsecore-11.1.so
libpulsecommon-11.1.so
libcli.so
libpthread.so.0
libc.so.6
3、修改依赖项名称
修改libc.so.6为libc.so.7
~$ patchelf --replace-needed libc.so.6 libc.so.7 module-cli.so
修改后查看如下,依赖名称已被修改
~$ patchelf --print-needed module-cli.so
libpulsecore-11.1.so
libpulsecommon-11.1.so
libcli.so
libpthread.so.0
libc.so.7