Мы пытаемся реализовать импортер формата Protocol Buffers (ONNX) для среды выполнения C ++. Наша среда выполнения будет использоваться внешними приложениями, которые также используют модели протоколов буфера.
При попытке выполнить процесс, который запускает как внешний, так и внутренний компоненты, мы видим ошибки, указывающие на то, что имя символа conflicts with the existing symbol
,
[libprotobuf ERROR google/protobuf/descriptor_database.cc:109] Symbol name "onnx.AttributeProto" conflicts with the existing symbol "onnx.AttributeProto".
[libprotobuf FATAL google/protobuf/descriptor.cc:1164] 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)
Есть ли способ, чтобы два компонента (приложение и общий объект) статически связывали код обработки PB-сообщений и регистрировали одни и те же символы Protobuf в одном процессе? Есть ли способ сказать другому компоненту не перерегистрировать сообщения PB?
Протокол Buffers содержит глобальный реестр, основанный на .proto
имя файла. Когда 2 компонента программного обеспечения пытаются добавить одно и то же сообщение PB в этот реестр, возникает конфликт имен.
Одним из способов обойти это является искусственное изменение пространства имен PB Message. Вы можете определить другое пространство имен для вашего сообщения PB и использовать CMakefile для замены и переименования символов.
Вот пример из onnx-tensorrt
проект:
Протокол Buffers содержит глобальный реестр, основанный на .proto
имя файла. Когда 2 компонента программного обеспечения пытаются добавить одно и то же сообщение PB в этот реестр, возникает конфликт имен.
Одним из способов обойти это является статическая привязка всей библиотеки Protocol Buffers к вашему проекту. Это эффективно создает отдельный реестр, в котором могут быть зарегистрированы сообщения PB.
Вот пример из ngraph
проект:
https://github.com/NervanaSystems/ngraph/commit/3d664abd7b8cc8295b6da79689f9bf119d55a2dd