我想测试pyrocksdb以及these步骤。在构建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
该问题已经报告并更详细地描述here,但在我看来还没有解决。有人已经解决了问题吗?
编辑:
我得到了它的工作。最后的提示是关于this rocksdb github的讨论。不知何故,g ++编译器的-lrt标志的使用似乎导致错误导致缺少链接。如上所述的快速修复是直接添加--no-as-need标志作为g ++编译器的选项。有关详细信息,请参阅here。
我刚刚运行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 ....
答案 0 :(得分:0)
感谢PlagTag。我们添加了" -Wl, - no-as-needed"到我们的Makefile:https://github.com/facebook/rocksdb/commit/d03f110904682a340137af07264eb8e148e3477d