背景
自v0.19.12.2版本起,OKC使用的leveldb被改为性能更好的rocksdb。
问题
1. 未安装 rocksdb
你可能在运行OKC节点遇到以下报错:
exchaind: error while loading shared libraries: librocksdb.so.6.15: cannot open shared object file: No such file or directory
也可能遇到以下错误:
array.go:4:11: fatal error: rocksdb/c.h: No such file or directory
// #include "rocksdb/c.h"
^~~~~~~~~~
也可能遇到以下错误:
panic: couldn't create db: Error initializing DB: Corruption: Unsupported compression method or corrupted compressed block contents: LZ4
解决方案
这里要使用最新版OKC代码(version>=v0.19.17.4),仅支持ubunu/centos/macos
make rocksdb
方法二:自执行命令安装
若在方法一
中你可能遇到类似如下报错:
ERROR: Unsupported distribution 'amzn'
如果你的操作系统是Linux系列,你可以参照以下命令结合自己的系统环境手动安装rocksdb:
1. # 这里要根据系统环境的不同而变化
yum install -y -q git make snappy snappy-devel lz4-devel yum-utils
apt-get install -y -qq git make libsnappy-dev liblz4-dev
2. git clone https://github.com/facebook/rocksdb.git -b v6.15.5
3. cd rocksdb
4. make uninstall PREFIX=/usr LIBDIR=/usr/lib
5. make shared_lib PREFIX=/usr LIBDIR=/usr/lib
6. make install-shared PREFIX=/usr LIBDIR=/usr/lib
7. # 应用动态链接库,因系统不同而不同
ldconfig
如果你的操作系统是Windows,可参考相应的官方安装说明进行操作,如果仍然遇到问题,可在OKC官方技术群中寻找解决方案。
根据您的系统不同,可能会因缺少依赖项而出现错误,导致安装失败,请根据具体错误信息安装对应的依赖。
2.rocksdb安装成功,链接失败
如果用户使用上述流程(rocksdb已经升级成功) 在编译exchain时,出现以下错误
../../go/pkg/mod/github.com/cosmos/gorocksdbev1.2.0/transactiondb.go:255:17: could not determine kind of name for C.rocksdb optimistictransactiondb checkpoint object create
../../go/pkg/mod/github.com/cosmos/gorocksdb@vl.2.0/transactiondb.go:208:12: could not determine kind of name for C.rocksdb optimistictransactiondb property value
../../go/pkg/mod/github.com/cosmos/gorocksdbevl.2.0/transactiondb.ao:236:2: could not determine kind of name for C.rocksdb optimistictransactiondb write
../../go/pkg/mod/github.com/cosmos/gorocksdbevl.2.0/transactiondb.go:59:12: could not determine kind of name for C.rocksdb transactiondb property value
请检测文件/usr/local/lib/pkgconfig/rocksdb.pc 是否存在 ? 如果存在,则说明你的机器已经安装了一个rocksdb。exchain的需要特定版本的rocksdb,请卸载安装在/usr/local/lib/目录下的rocksdb(如果你的机器存在某个程序需要依赖它,请迁移该程序至其他机器)。
解决方案
卸载rocksdb(安装在/usr/local/lib)
rm /usr/local/lib/pkconfig/rocksdb.pc
rm -r /usr/local/include/rocksdb/
//删除rocksdb相关链接库
rm /usr/local/lib/librocksdb.so*