如何解决将生成的protobuf文件编译到静态库中
我有几个项目都依赖于生成的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 举报,一经查实,本站将立刻删除。