これらの手順に従ってpyrocksdbをテストしたいと思います。shared_lib をビルドして pyrocksb をセットアップした後 (大きな問題がなく、厳密に手順に従っている)、python から rocksdb を読み込もうとすると、次のエラーが発生します。
>>>import rocksdb
Traceback (most recent call last):
File "", line 1, in
File "/home/user/virtualenv/pyrocks/local/lib/python2.7/site-packages/rocksdb/__init__.py", line 1, in
from ._rocksdb import *
ImportError: /usr/local/lib/librocksdb.so: undefined symbol: clock_gettime
この問題はすでに報告されており、ここで詳細に説明されていますが、私の考えではまだ解決されていません。誰かがすでに修正を行っていますか?
編集:
私はそれを働かせました。最後のヒントは、このrocksdb github ディスカッションにありました。どういうわけか、g++ コンパイラの -lrt フラグを使用すると、リンクの欠落につながるバグが発生するようです。前述の簡単な修正方法は、g++ コンパイラのオプションとして --no-as-needed フラグを直接追加することです。詳しくはこちらをご覧ください。
make を実行したところ、画面出力のオプションとフラグ リストのコピーを停止しました。上記のオプションのフラグ コマンドを先頭に挿入します。それはそれを機能させました:-)
私の場合、g++ コマンドは次のようになりました。「-Wl, --no-as-needed」を参照してください。
g++ -shared -Wl,--no-as-needed,-soname -Wl,librocksdb.so -g -Wall -Werror -Wno-sign-compare -I. -I./include -std=c++11 -DROCKSDB_PLATFORM_POSIX -DOS_LINUX -fno-builtin-memcmp -DROCKSDB_ATOMIC_PRESENT -DROCKSDB_FALLOCATE_PRESENT -DSNAPPY -DGFLAGS -DZLIB -DBZIP2 -DHAVE_JEMALLOC -O2 -fno-omit-frame-pointer -momit-leaf-frame-pointer -Woverloaded-virtual -fPIC -lpthread -lrt -lsnappy -lgflags -lz -lbz2 and so on ....