error while loading shared libraries: libxxx.so通用解决方法

有时我们用make install安装一些依赖包以后,运行一些程序会报这个错误

./lenet: error while loading shared libraries: libcudnn.so.7: cannot open shared object file: No such file or directory

这里的原因是运行时没找到相应的lib文件,但大多数时候并不是因为没有这个文件,而是没有配置好环境变量

首先看一下提示,对缺失的库文件隶属于什么软件有个大概的感觉,比如上面的 libcudnn.so.7,从名字就能判断与CUDA,cuDNN相关,不认识的话就百度一下,搞清楚这个库要是有的话大概是在哪,然后转到相应的lib目录下看看,如果是真的不存在这个库文件,那就是安装出了问题,重新安装一下。但是大多数情况都是目录存在这个文件,只是系统没找到他的路径,那我们要做的就是把路径添加进来

方法1:在终端用export命令,但是退出终端就失效了,例如

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxxx/TensorRT-7.0.0.11/lib

方法2:修改~/.bashrc或~/.bash_profile或/etc/profile

区别是前两个只对当前用户生效,/etc/profile对所有用户起效

修改~/.bashrc的例子

sudo gedit ~/.bashrc
# 添加一句
export LD_LIBRARY_PATH=/xxxx/TensorRT-7.0.0.11/lib:$LD_LIBRARY_PATH
# 保存退出
source ~/.bashrc

修改/etc/profile的例子

sudo gedit /etc/profile
# 在文件末尾添加
export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}} # PATH是可执行文件路径
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64{LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
# 保存退出
source /etc/profile

方法3:/etc/ld.so.conf.d/路径下创建任意一个.conf文件,把lib文件的路径写在里面,比如

sudo gedit /etc/ld.so.conf.d/tensorrt.conf
# 写入
/xxxx/TensorRT-7.0.0.11/lib
/usr/local/cuda/lib64
# 保存退出

# 更新缓存
sudo ldconfig

个人觉得方法3最好用,方便管理和修改。但有的教程说ldconfig使用后系统出问题了,我还没遇到过。

参考Linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH

还有一种情况是找不到.h文件,我们需要将include文件夹的路径添加到系统搜索路径中

sudo gedit /etc/profile

# 添加以下内容
export C_INCLUDE_PATH=path_name:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=path_name:$CPLUS_INCLUDE_PATH
# 保存退出

# 使改动生效
source /etc/profile

# 验证是否成功,成功会输出刚才添加的路径
echo | gcc -x c -v -E -
echo | gcc -x c++ -v -E -

参考ubuntu下如何设置程序include搜索路径及链接路径

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值