cannot open shared object file: No such file or directory 加载库失败的原因及解决
cannot open shared object file: No such file or directory 加载库失败的原因及解决
1. 找不到链接库
程序运行时,假如没有在代码里指定库路径,则库链接路径由 LD_LIBRARY_PATH 环境变量指定
export LD_LIBRARY_PATH=库路径:$LD_LIBRARY_PATH
如果系统内有多个同名库文件,而且LD_LIBRARY_PATH 都指定了这些路径,则会优先使用第一个路径下的库。
如果一个路径下没有该库,则会自动寻找下个路径,如果都没找到,就会报 "cannot open shared object file: No such file or directory"啦。
2. 库文件本身问题
假如是我们自己写的动态库,其实还有一种情况也会导致报“cannot open shared object file”, 那就是库本身有问题,这种问题一般是库的某个“symbol” 即符号没找到。
那这时不应该报 “undefine symbol xxx”的错吗。为什么会报"cannot open shared object file: No such file or directory",笔者猜测可能是链接器认为这个库有问题,便去找下一个库,直到没有找到,所以报没有这样的文件或目录这个报错。
2.1 调试库缺少某个符号的方法
加载库时,指定库的绝对路径,这样连接器就不会去找其他库
QLibrary lib("/mnt/mywork/" + strLibName);
这时程序运行时会报告该库缺少的符号
自己写动态库时,假如某个函数声明了却没有实现,动态库是能编译通过的,所以一不小心就会经常出问题。