目录
可执行程序如何动态库链接?
我们的源码编译为可执行文件时,链接器链接动态库需要到我们指定的动态库路径下查找动态库。编译完成后对于可执行文件是如何链接动态库的,其实际的先后搜索顺序如下所示:
- 编译源代码指定的动态库路径;
- 环境变量LD_LIBRARY_PATH指定的动态库路径;
- /etc/ld.so.conf指定的动态库路径;
- 默认的动态库路径/lib和/usr/lib;
解决链接不到动态库(error while loading shared libraries: lib.so)
首先这里介绍如何查看当前可执行程序链接到的动态库:
# linux
ldd ./your_exe
# mac
otool -L ./your exe
基于动态库的搜索原则也对应存在不同的方式解决,首先查找动态库实际路径:
sudo find / -type f -name "*your_target.so*"
1、将动态库拷贝至编译源代码指定的动态库路径;
2、指定环境变量
export LD_LIBRARY_PATH=/your/lib/dir/:$LD_LIBRARY_PATH
3、将动态库链接追加至配置文件最后
# 将动态库实际路径追加至文件最后保存退出
sudo vim /etc/ld.so.conf
# 运行ldconfig
ldconfig
4、将动态库拷贝至默认的动态库路径/lib和/usr/lib;