解決 Linux error while loading shared libraries: cannot open shared object file: No such file or directory


安裝最新版本Emqtt,參照官方文檔安裝后,執行報錯:

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

 

從互聯網上找到了一些文章, 解決了我的問題,這里整理貼一下,類似的問題應該都可以參照解決。

 

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

命令:wheris libsctp.so.1

先查找一下本地是否存在文件,如果存在的話,直接跳到第三步,我這里的結果是找不到。

 

2.然后google 一下 下載libsctp

這個網站上有很多so文件下載: https://www.rpmfind.net/

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

 

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM