解決 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服務,問題解決。

相關文章
相關標籤/搜索