安裝最新版本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服務,問題解決。