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);

这时程序运行时会报告该库缺少的符号
在这里插入图片描述

自己写动态库时,假如某个函数声明了却没有实现,动态库是能编译通过的,所以一不小心就会经常出问题。

posted @ 2020-12-04 16:00  HL棣  阅读(73)  评论(0编辑  收藏  举报  来源