Protobuf和Node.JS库错误
我正在Ubuntu 14.04 LTS上使用Node.JS的google协议缓冲区。我有两个不同的(A和B)Node.JS插件(c++),它们使用相同的协议缓冲区和protobuf库。在模块a之前是必需的之后,我使用require()创建模块B的新实例时,服务器停止运行,并显示错误消息:Protobuf和Node.JS库错误,node.js,protocol-buffers,Node.js,Protocol Buffers,我正在Ubuntu 14.04 LTS上使用Node.JS的google协议缓冲区。我有两个不同的(A和B)Node.JS插件(c++),它们使用相同的协议缓冲区和protobuf库。在模块a之前是必需的之后,我使用require()创建模块B的新实例时,服务器停止运行,并显示错误消息: [libprotobuf ERROR google/protobuf/descriptor_database.cc:57] File already exists in database: Anam.proto
[libprotobuf ERROR google/protobuf/descriptor_database.cc:57] File already exists in database: Anam.proto
[libprotobuf FATAL google/protobuf/descriptor.cc:1157] 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)
我在谷歌上搜索了这个错误,发现其他人只有在Linux上才会遇到这个错误。我还从github安装了最新版本的protobuf库,但没有任何帮助。binding.gyp的一部分,其中包括libprotobuf,如下所示:
"libraries": ["/usr/lib/libpq.so",
"/usr/local/lib/libprotobuf.so",
"/usr/local/lib/libboost_system.so",
"/usr/local/lib/libboost_thread.so",
"/usr/local/lib/libboost_signals.so"]
如果我为同一个模块创建了更多实例(例如,需要两次addon A),它就可以工作。有人有任何建议来解决这个问题吗?< /P> < P>问题可能是这两个C++模块都包含了相同的<>代码> PROTO TO /Cult>文件的单独编译副本,但它们共享了LIbToBuffF.的相同副本。每一个都试图将其protobuf描述符类型注册到全局类型描述符表中,然后就会出现冲突 有两种方法可以解决此问题:
.proto
文件移动到两个模块链接的共享库中(以便它们最终共享一份已编译的proto)请注意,此问题影响所有平台,但人们可能在Windows上看不到它,因为静态链接libprotobuf在Windows上更常见。谢谢您的回答!针对libprotobuf的静态链接解决了这个问题(我将.a文件而不是.so文件链接为:“libraries”:[“/usr/local/lib/libprotobuf.a”,…])。我总是用序列化消息进行通信,所以它工作得很好。