У меня есть спецификация protoBuff3, которая выглядит примерно так
message MSG {
string name = 1;
repeated string data = 2;
}
И файл опций, который устанавливает «MSG.data max_count: 20»
Я пытаюсь кодировать и декодировать протобуфы без использования.
Я сейчас пользуюсь pb_ostream_from_buffer а также pb_encode Однако я, пытаясь связать, я получаю сообщение об ошибке, говоря, что pb_ostream _…, pb_encode, pb_decode, … внешние символы не существуют. Я могу найти эти функции, определенные в pb_encode.h и pb_decode.h
.В сети я вижу ссылку на такие функции, как
ParseFromString а также SerializeToString, Однако я не могу найти эти функции нигде.
Как правильно сериализовать и сериализовать мое сообщение без iostreams?
Существует много библиотек protobuf, которые отделены друг от друга. Обычно вы выбираете один и используете это:
pb_ostream_from_buffer
а также pb_encode
,ParseFromString
а также SerializeToString
,Любой из них может использоваться для сериализации и анализа сообщений из буферов памяти. Кроме того, библиотека Google поддерживает iostreams C ++, а nanopb поддерживает аналогичную потоковую систему, реализованную в C.
Ошибка о том, что «внешние символы не существуют» предполагает, что вы не связываетесь с кодом библиотеки nanopb (pb_encode.c
, pb_decode.c
а также pb_common.c
). Как обычно, .h
файлы содержат только функцию декларация, в то время как вам нужно связать с .c
файлы для обеспечения функции определение.
Других решений пока нет …