首页 新闻 会员 周边

protobuf动态静态问题

0
[待解决问题]

[libprotobuf ERROR google/protobuf/descriptor_database.cc:57] File already exists in database: google/protobuf/descriptor.proto
[libprotobuf FATAL google/protobuf/descriptor.cc:1018] CHECK failed: generated_database_->Add(encoded_file_descriptor, size):
terminate called after throwing an instance of 'google::protobuf::FatalException'
what(): CHECK failed: generated_database_->Add(encoded_file_descriptor, size):
Aborted (core dumped

尝试了很多方法,不知道该如何解决上面这个问题,好像是因为动态存储的问题

小小园子的主页 小小园子 | 菜鸟二级 | 园豆:202
提问于:2024-04-23 20:25
< >
分享
所有回答(1)
0

这个错误通常是因为在程序运行时尝试加载已经在编译时加载的 .proto 文件。这可能是由于动态加载和静态加载冲突引起的。这里有几种可能的解决方案:

静态加载解决方案:如果你在编译时生成了 .pb.cc 和 .pb.h 文件,你可以尝试只使用这些静态生成的文件,而不是尝试在运行时动态加载 .proto 文件。确保你的代码中没有动态加载 .proto 文件的代码。
动态加载解决方案:如果你确实需要在运行时动态加载 .proto 文件,你需要确保每个文件只加载一次。可以通过检查文件是否已经存在来做到这一点。你可以尝试使用以下方法之一:
在加载之前检查文件是否已经存在于数据库中,如果存在,则不再加载。
在加载之前,先清空现有的数据库,然后重新加载。
检查编译选项:确保你在编译时没有启用重复加载的选项,或者检查是否有其他编译选项可能会导致这个问题。
调试信息:尝试输出更多的调试信息,以便更好地理解何时发生加载和冲突。
如果你能提供更多关于你的代码结构以及如何加载 .proto 文件的信息,我可能可以提供更具体的建议。

Technologyforgood | 园豆:5686 (大侠五级) | 2024-04-23 22:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册