问题描述
我有几个项目都依赖于生成的protobuf C ++文件。以前的维护者只是将源添加到每个目标中(导致生成的cpp文件将被多次构建)。我以为可以通过将每个protobuf cpp文件作为一个静态库构建一次,然后根据需要将它们链接到每个目标中来节省一些时间。
一切都建立了,但是目标程序不再起作用。我将错误追溯到以下代码:
const google::protobuf::Descriptor *desc = google::protobuf::DescriptorPool::generated_pool()->FindMessageTypeByName("my.type");
google::protobuf::Message *msg = google::protobuf::MessageFactory::generated_factory()->GetPrototype(desc)->New();
当我将protobuf文件作为静态库链接时,FindMessageTypeByName()方法调用始终返回nullptr。通过阅读,我发现DescriptorPool::generated_pool()包含在编译时构建的协议消息:
这引起了几个问题(回答其中任何一个问题都是很有教育意义的):
- protobuf库如何管理此注册?感觉我需要生成一个函数以在main之前作为钩子运行,或者可能是要调用的初始化函数的静态列表。
- 是否有一种方法可以将预编译的protobuf cpp文件静态链接为自动添加到生成的池中的方式?
- 如果不可能2,如何将这些预编译的原始文件添加到新池中?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)