C++ nanopb Protobuff без <iostream>
У меня есть спецификация 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?
1 ответ
Существует много библиотек protobuf, которые отделены друг от друга. Обычно вы выбираете один и используете это:
- nanopb: имеет такие функции, как
pb_ostream_from_buffer
а такжеpb_encode
, - Библиотека protobuf C++ от Google: имеет такие функции, как
ParseFromString
а такжеSerializeToString
,
Любой из них может использоваться для сериализации и анализа сообщений из буферов памяти. Кроме того, библиотека Google поддерживает iostreams C++, а nanopb поддерживает аналогичную потоковую систему, реализованную в C.
Ошибка о том, что "внешние символы не существуют" предполагает, что вы не связываетесь с кодом библиотеки nanopb (pb_encode.c
, pb_decode.c
а также pb_common.c
). Как обычно, .h
файлы содержат только объявление функции, в то время как вам нужно связать с .c
файлы для обеспечения определения функции.