Linux下动态依赖库的问题

发布时间 2024-01-09 19:12:18作者: drink_crow

由于 Linux 默认的查找路径中没有当前文件夹的,所以编译的程序或动态库移植比较麻烦。

查看依赖,rpath等信息

readelf -d path/to/exec

测试依赖库是否能找到

ldd path/to/exec

写rpath

patchelf --set-rpath "\$ORIGIN:\$ORIGIN/lib"

使用chrpath也能做到,但是无法修改没有rpath的文件,路径以冒号:分割,$ORIGIN 表示当前的文件的路径,需要\$做转义字符

值得注意的是,动态库的动态库依赖读取的rpath都是分别独立的。

shell脚本,批量修改当前文件夹下的 rpath

folder = "./"
allfiles = $(ls $folder | grep ".so$")
for sfile in ${allfiles}
do
  patchelf --set-rpath "\$ORIGIN"${sfile}
done