# python
Python 3.6.2 (default, Oct 17 2017, 21:26:29)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyrocksdb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/srv/venvs/service/trusty/service_venv_python3.6/lib/python3.6/site-packages/python_rocksdb-1.0-py3.6-linux-x86_64.egg/pyrocksdb/__init__.py", line 1, in <module>
from .pyrocksdb import *
ImportError: /srv/venvs/service/trusty/service_venv_python3.6/lib/python3.6/site-packages/python_rocksdb-1.0-py3.6-linux-x86_64.egg/pyrocksdb/pyrocksdb.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN7rocksdb22GetLengthPrefixedSliceEPKc
I'm guessing the linker includes it because the function is extern in lib/rocksdb/include/rocksdb/memtablerep.h but I can't work out how to make it not include it or get the line from .pyrocksdb import * to not import it.
This problem appears in the container with ancient gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4 but not gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516.
I'm creating this issue to help anybody else who bumps into it. Sorry, no solution yet beyond upgrading gcc.
I built the pybind11 branch in a container following the instructions at https://github.com/twmht/python-rocksdb/tree/pybind11 :
but when a simple test fails:
readelf
agrees it isUND
:I'm guessing the linker includes it because the function is
extern
inlib/rocksdb/include/rocksdb/memtablerep.h
but I can't work out how to make it not include it or get the linefrom .pyrocksdb import *
to not import it.This problem appears in the container with ancient
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4
but notgcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
.I'm creating this issue to help anybody else who bumps into it. Sorry, no solution yet beyond upgrading gcc.