error while loading shared libraries问题
通常在运行一个binary/编译binary的时候出现
e.g.
error while loading shared libraries: libglog.so.0
-
如果没有安装glog,则安装一下。
-
如果已经安装了还是报错,那可能是在对应的.so目录里找不到这个so。
- 可以
find . -name "libglog"
,找到这个so所在目录 vim /etc/ld.so.conf
,里面就是so查询目录- 默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定–prefix,会将库安装在/usr/local/lib目录下;当运行程序需要链接动态库时,提示找不到相关的.so库,会报错。也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,需要将目录加进去。
- 所以应该添加对应找不到的那个的so的真实目录
- 常见的未添加目录/usr/local/lib、/usr/local/lib64等等
- 保存后,在命令行终端执行:
/sbin/ldconfig -v
;其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。
- 可以
-
通常上面两种方法就可以解决问题,如果还是不能解决,需要检查so文件的权限。
-
其实,对于由普通用户自己编译生成的.so库文件,比较好的做法是将这些.so库文件的路径用export指令加入到\~/.bash_profile中的LD_LIBRARY_PATH变量中,LD_LIBRARY_PATH是程序运行需要链接.so库时会去查找的一个目录,\~/.bash_profile是登陆或打开shell时会读取的文件,这样,每次用户登录时,都会把这些.so库文件的路径写入LD_LIBRARY_PATH,这样就可以正常地使用这些.so库文件了。
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH