protobuf para C++: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que são Protocol Buffers (protobuf) e para que servem?

\n\n

Protocol Buffers (protobuf) é um mecanismo poderoso, eficiente e extensível de serialização de dados estruturados, desenvolvido pelo Google. Ele permite definir a estrutura dos dados uma vez em um arquivo especial (.proto) e, em seguida, gerar código-fonte em várias linguagens de programação (C++, Java, Python, Go, etc.) para ler e escrever esses dados.

\n\n

Para que serve o protobuf?

\n
    \n
  • Eficiência: O Protobuf serializa dados em formato binário, que é significativamente mais compacto e rápido de processar do que formatos de texto como XML ou JSON. Isso é especialmente importante para sistemas de alta carga e arquitetura de microsserviços.
  • \n
  • Velocidade: A serialização e desserialização de dados ocorrem muito mais rapidamente do que em formatos de texto tradicionais.
  • \n
  • Segurança de tipos: O código gerado garante tipagem estrita, reduzindo o número de erros em tempo de execução.
  • \n
  • Multiplataforma e multilinguagem: Você pode definir o esquema de dados uma vez e usá-lo em projetos em C++, Python, Java e outras linguagens.
  • \n
  • Compatibilidade reversa: O Protobuf suporta a evolução do esquema de dados: você pode adicionar novos campos sem quebrar versões antigas dos aplicativos.
  • \n
\n\n

Instalação do protobuf para C++

\n\n

Para trabalhar com protobuf em C++, é necessário instalar duas coisas: o compilador protoc (que converte arquivos .proto em código C++) e a própria biblioteca protobuf para C++.

\n\n

1. Instalação do compilador protoc

\n

A maneira mais simples é baixar um binário pronto da página oficial de lançamentos do protobuf no GitHub.

\n
# Exemplo para Linux (Ubuntu/Debian)\nsudo apt-get install protobuf-compiler\n\n# Exemplo para macOS (via Homebrew)\nbrew install protobuf\n\n# Para Windows, baixe protoc-x.x.x-win64.zip e adicione o caminho para protoc.exe à variável de ambiente PATH
\n\n

2. Instalação da biblioteca protobuf para C++

\n

Recomenda-se compilar a biblioteca a partir do código-fonte ou usar um gerenciador de pacotes.

\n
# Ubuntu/Debian\nsudo apt-get install libprotobuf-dev\n\n# macOS (Homebrew)\nbrew install protobuf\n\n# Compilação a partir do código-fonte (método universal)\ngit clone https://github.com/protocolbuffers/protobuf.git\ncd protobuf\ngit submodule update --init --recursive\nmkdir build && cd build\ncmake -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF ..\nmake -j$(nproc)\nsudo make install
\n\n

3. Configuração do projeto CMake (método recomendado)

\n

Adicione ao seu CMakeLists.txt:

\n
find_package(Protobuf REQUIRED)\ninclude_directories(${Protobuf_INCLUDE_DIRS})\n\n# Compilação automática de arquivos .proto\nfile(GLOB PROTO_FILES "*.proto")\nprotobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})\n\nadd_executable(my_program main.cpp ${PROTO_SRCS})\ntarget_link_libraries(my_program ${Protobuf_LIBRARIES})
\n\n

Início rápido com exemplo de código

\n\n

Vamos criar um exemplo simples para demonstrar os fundamentos. Definiremos uma estrutura de dados para um contato.

\n\n

Passo 1: Criar o arquivo .proto

\n

Arquivo contact.proto:

\n
syntax = "proto3";\n\npackage tutorial;\n\nmessage Person {\n  string name = 1;\n  int32 age = 2;\n  string email = 3;\n}
\n\n

Passo 2: Gerar o código C++

\n
protoc --cpp_out=. contact.proto
\n

Após executar o comando, os arquivos contact.pb.h e contact.pb.cc serão gerados.

\n\n

Passo 3: Escrever o código em C++

\n

Arquivo main.cpp:

\n
#include <iostream>\n#include <fstream>\n#include "contact.pb.h"\n\nusing namespace std;\n\nint main() {\n    // Garantir que a biblioteca foi inicializada\n    GOOGLE_PROTOBUF_VER                    

Recommendations