0

我想在这些之后测试 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 标志的使用似乎导致了导致链接丢失的错误。如前所述,一个快速修复方法是直接添加 --no-as-needed 标志作为 g++ 编译器的选项。看此处

我刚刚运行 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 ....
4

1 回答 1

0

感谢 PlagTag。我们在 Makefile 中添加了“-Wl, --no-as-needed”:https ://github.com/facebook/rocksdb/commit/d03f110904682a340137af07264eb8e148e3477d

于 2015-06-10T19:05:09.027 回答