使用pip、virtualenv和cpp_表示安装python protobuf

使用pip、virtualenv和cpp_表示安装python protobuf,python,c++,protocol-buffers,Python,C++,Protocol Buffers,我正在尝试安装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/pr

我正在尝试安装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
然后,我使用pip和virtualenv(virtualenvwrapper)为python安装protobuf。我写

env CPATH=$PROTOBUF_HOME:$PROTOBUF_HOME/src LIBRARY_PATH=$PROTOBUF_HOME/.libs 
pip install protobuf 
--install-option="--cpp_implementation"
正如我在这里读到的:

在my.bashrc文件中(可从命令行访问):

为了以防万一,我重新编译了.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)
dic  9 10:51 /usr/lib/x86_64-linux-gnu/libprotobuf.so.8 -> libprotobuf.so.8.0.0
feb 13  2014 /usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0
看看:

ls -l /usr/lib/x86_64-linux-gnu/libprotobuf.so.8
ls -l /usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0
返回:

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)
dic  9 10:51 /usr/lib/x86_64-linux-gnu/libprotobuf.so.8 -> libprotobuf.so.8.0.0
feb 13  2014 /usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0
看看:

ls -l /usr/lib/x86_64-linux-gnu/libprotobuf.so.8
ls -l /usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0
返回:

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)
dic  9 10:51 /usr/lib/x86_64-linux-gnu/libprotobuf.so.8 -> libprotobuf.so.8.0.0
feb 13  2014 /usr/lib/x86_64-linux-gnu/libprotobuf.so.8.0.0

缺少的符号是一个typeinfo对象,我认为只有在启用RTTI编译时才会包含它。libprotobuf.so是否可能是用
-fno-rtti
编译的?如果是这样,请在不使用该标志的情况下重新编译它,或者使用该标志编译Python模块。否则,问题可能是某个地方的版本不匹配,但从这里很难说。