解决 Linux error while loading shared libraries: cannot open shared object file: No such file or direc

安装最新版本Emqtt,参照官方文档安装后,执行报错:html

Linux error while loading shared libraries libsctp.so.1: cannot open shared object file: No such file or directory linux

 

从互联网上找到了一些文章, 解决了个人问题,这里整理贴一下,相似的问题应该均可以参照解决。centos

 

1.先在本地查找一下文件网站

命令:wheris libsctp.so.1google

先查找一下本地是否存在文件,若是存在的话,直接跳到第三步,我这里的结果是找不到。spa

 

2.而后google 一下 下载libsctp.net

这个网站上有不少so文件下载: https://www.rpmfind.net/htm

https://www.rpmfind.net/linux/RPM/centos/6.8/x86_64/Packages/lksctp-tools-1.0.10-7.el6.i686.htmlblog

 

RPM安装,参照文档

http://www.centoscn.com/CentOS/help/2013/1019/1906.html

 

安装后wheris  libsctp.so.1

发现安装在usr/lib下面了。

再次运行 ./bin/emqttd consle,仍是报错。

 

3.怀疑是环境变量 LD_LIBRARY_PATH的问题。

系统不知道xxx.so放在哪一个目录下,这时候就要在/etc/ld.so.conf中加入xxx.so所在的目录。

通常而言,有不少的so会存放在/usr/local/lib这个目录底下,去这个目录底下找,果真发现本身所须要的.so文件。

因此,在/etc/ld.so.conf中加入/usr/local/lib这一行,保存以后,再运行:/sbin/ldconfig –v更新一下配置便可。

在我这里,rpm后,so文件安装在了/usr/lib下,这个目录下应该是不须要配置的。

须要配置的同窗能够参见:

http://blog.csdn.net/sahusoft/article/details/7388617

在我这里,/sbin/ldconfig 更新后仍是报错。不过错误信息变了:

 wrong ELF class: ELFCLASS32

 

4.查询后,发现应该是 32位,64位问题。我安装的Emqttd是64位版本。

使用命令

file /usr/lib64/libsctp.so.1 发现是个连接到 `libsctp.so.1.0.17'

file /usr/lib64/libsctp.so.1.0.17,发现是个32位的文件。

看起来是64位的Emqtt用不了32位的so文件。

 

5. 从新google libsctp的64位版本,rpm安装。安装以前先rpm -e 卸载原来的32位版本。

安装64位后,ldconfig 。再次运行,成功打开emqtt服务,问题解决。

相关文章
相关标签/搜索