linux设置动态库搜索路径三种方式
ldd xxx
会提示找不到动态库,多半是动态库路径没有加入的搜索路径中:
动态库的路径问题为了让执行程序顺利找到动态库,有三种方法:
(1)把库拷贝到动态加载器默认搜索目录:/usr/lib和/lib
(2)在LD_LIBRARY_PATH环境变量中加上库所在路径。
例如动态库libhello.so在/home/ting/lib目录下,以bash为例,
编辑$HOME下.profile文件添加如下:
$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ting/lib
(3) 编辑/etc/ld.so.conf文件,加入库文件所在目录的路径,运行ldconfig,该命令 会重建/etc/ld.so.cache文件
比如:
/usr/local/mysql/lib
每行一个目录,采用绝对路径
当系统加载可执行代码时候,能够知道其所依赖的库的名字,但是还需要知道共享库绝对路径,此时就需要系统动态载入器(dynamic linker/loader)执行如下动作:
对于elf格式的可执行程序,是由ld-linux.so*来完成搜索:
它先后搜索elf文件的 DT_RPATH段
环境变量LD_LIBRARY_PATH
/etc/ld.so.cache文件列表 (ldconfig命令根据/etc/ld.so.conf生成二进制文件)
/lib/,/usr/lib目录
找到库文件后将其载入内存