最近在ubuntu18上面碰到一个问题,就是一个so(A)引用另外一个so(B)的时候,提示找不到对应的so。
原因如下:
在A的查找路径中并没有B,所以找不到B。
查找路径顺序如下:RPATH->LD_LIBRARY_PATH->/etc/ld.so.conf->默认路径/lib /usr/lib
验证方式:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/要找的库路径 试一下是不是找到库了
题外话
1、如果不想每次都设置LD_LIBRARY_PATH怎么办,那就要给so添加RPATH,用什么方式添加呢?如下命令:patchelf
patchelf --set-rpath 执行此命令可以给so添加上rpath,当然了此命令也可以看rpath和删除rpath,更多使用方法直接输入pathelf 就会出现帮助的。
2、另外so其实是一个ELF文件,RPATH在ELF的.dynamic段中,可以通过nm、readelf、hexdump等也可以看到,提一下,感兴趣的同学可以看一下ELF文件的格式,可以看一下链接,个人认为讲的还不错https://www.cnblogs.com/20135223heweiqin/p/5554922.html
3、另外注意RPATH和RUNPATH的区别