我正在尝试安装protobuf,并且在执行我的应用时遇到错误:
import Request_pb2
File "blablabla/Request_pb2.py", line 6, in <module>
from google.protobuf import descriptor as _descriptor
File "blablabla/.virtualenvs/test/local/lib/python2.7/site-packages/google/protobuf/descriptor.py", line 50, in <module>
from google.protobuf.pyext import _message
ImportError: blablabla/.virtualenvs/test/local/lib/python2.7/site-packages/google/protobuf/pyext/_message.so: undefined symbol:
_ZTIN6google8protobuf10TextFormat17FieldValuePrinterE
我安装了协议缓冲区的c ++版本2.6.1。写作protoc --version我得到了:
libprotoc 2.6.1
然后,我使用pip和virtualenv(virtualenvwrapper)为python安装了protobuf。我写了
env CPATH=$PROTOBUF_HOME:$PROTOBUF_HOME/src LIBRARY_PATH=$PROTOBUF_HOME/.libs
pip install protobuf
--install-option="--cpp_implementation"
我在这里阅读:https://github.com/google/protobuf/issues/144
在我的.bashrc文件中(可从命令行访问):
export PROTOBUF_HOME=~/projects/protobuf-2.6.1
#Python Protobuf configuration.
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=2
为了以防万一,我重新编译了.proto文件,因为之前我有2.6.0版本。
这是怎么回事? 提前谢谢!
修改
ldd _message.so
返回:
linux-vdso.so.1 => (0x00007fff3e1f8000)
libprotobuf.so.8 => /usr/lib/x86_64-linux-gnu/libprotobuf.so.8 (0x00007f12b8a43000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f12b873f000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f12b8528000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f12b8163000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f12b7f45000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f12b7d2b000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f12b7a25000)
/lib64/ld-linux-x86-64.so.2 (0x00007f12b8f81000)
看一看:
ls -l /usr/lib/x86_64-linux-gnu/libprotobuf.so.8
返回:
dic 9 10:51 /usr/lib/x86_64-linux-gnu/libprotobuf.so.8 -> libprotobuf.so.8.0.0
看一看:
ls -l /usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0
返回:
feb 13 2014 /usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0