nanopb在protobuf中的编译问题

问题描述

我正在使用nanopb库

我寻求您的建议来解决构建问题-我正在使用protobuf 3.12,nanopb 0.4.2,puython3,gcc。我同时编译了c和python协议,但是在构建时仍然遇到问题。

make 
protoc -osimple.pb simple.proto   - step done 
nanopb/examples/simple $ python ../../generator/nanopb_generator.py simple.pb -> following error
$ python3 ../../generator/nanopb_generator.py simple.pb Traceback (most recent call last): File "../../generator/nanopb_generator.py",line 50,in from .proto import nanopb_pb2 SystemError: Parent module '' not loaded,cannot perform relative import

During handling of the above exception,another exception occurred:

Traceback (most recent call last): File "../../generator/nanopb_generator.py",line 71,in import proto.nanopb_pb2 as nanopb_pb2 File "/home/vagrant/nanopb-0.4.2-linux-x86/generator/proto/nanopb_pb2.py",line 10,in from google.protobuf import symbol_database as _symbol_database ImportError: cannot import name 'symbol_database'

请告诉我我所缺少的。我应该只使用Python2吗?
另外不建议在nanopb中使用protobuf的哪些功能? nanopb是否支持proto2和proto3语法?

解决方法

generator / proto / nanopb_pb2.py”,第10行,来自google.protobuf,将symbol_database导入为_symbol_database ImportError:无法导入名称“ symbol_database”

似乎protoc版本与您的python-protobuf版本之间存在版本冲突。尝试删除nanopb_pb2.py,它应该会再次自动生成,如果运气更好。

考虑到您使用的是二进制软件包,您还可以调用generator_bin/nanopb_generator,它应该已经包含所有依赖项。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...