Protobuf C++ : guide complet avec exemples pratiques

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que Protocol Buffers (protobuf) et pourquoi l'utiliser ?

Protocol Buffers (protobuf) est un mécanisme puissant, efficace et extensible de sérialisation de données structurées, développé par Google. Il permet de définir une fois la structure des données dans un fichier spécial (.proto), puis de générer du code source dans différents langages de programmation (C++, Java, Python, Go, etc.) pour lire et écrire ces données.

Pourquoi utiliser protobuf ?

  • Efficacité : Protobuf sérialise les données au format binaire, bien plus compact et rapide à traiter que les formats textuels comme XML ou JSON. C'est crucial pour les systèmes à forte charge et l'architecture microservices.
  • Vitesse : La sérialisation et la désérialisation sont nettement plus rapides qu'avec les formats textuels traditionnels.
  • Sécurité de typage : Le code généré assure un typage strict, réduisant les erreurs à l'exécution.
  • Multiplateforme et multilangue : Définissez votre schéma de données une fois et utilisez-le dans des projets C++, Python, Java et autres.
  • Rétrocompatibilité : Protobuf permet de faire évoluer le schéma : ajoutez de nouveaux champs sans casser les anciennes versions des applications.

Installation de protobuf pour C++

Pour utiliser protobuf en C++, deux éléments sont nécessaires : le compilateur protoc (qui transforme les fichiers .proto en code C++) et la bibliothèque protobuf pour C++.

1. Installation du compilateur protoc

Le plus simple est de télécharger un binaire précompilé depuis la page officielle des releases protobuf sur GitHub.

# Exemple pour Linux (Ubuntu/Debian)
sudo apt-get install protobuf-compiler

# Exemple pour macOS (via Homebrew)
brew install protobuf

# Pour Windows, téléchargez protoc-x.x.x-win64.zip et ajoutez le chemin vers protoc.exe à la variable PATH

2. Installation de la bibliothèque protobuf pour C++

Il est recommandé de compiler la bibliothèque depuis les sources ou d'utiliser un gestionnaire de paquets.

# Ubuntu/Debian
sudo apt-get install libprotobuf-dev

# macOS (Homebrew)
brew install protobuf

# Compilation depuis les sources (méthode universelle)
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF ..
make -j$(nproc)
sudo make install

3. Configuration du projet CMake (méthode recommandée)

Ajoutez ceci à votre fichier CMakeLists.txt :

find_package(Protobuf REQUIRED)
include_directories(${Protobuf_INCLUDE_DIRS})

# Compilation automatique des fichiers .proto
file(GLOB PROTO_FILES "*.proto")
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})

add_executable(my_program main.cpp ${PROTO_SRCS})
target_link_libraries(my_program ${Protobuf_LIBRARIES})

Démarrage rapide avec un exemple de code

Créons un exemple simple pour illustrer les bases. Définissons une structure de données pour un contact.

Étape 1 : Créer le fichier .proto

Fichier contact.proto :

syntax = "proto3";

package tutorial;

message Person {
  string name = 1;
  int32 age = 2;
  string email = 3;
}

Étape 2 : Générer le code C++

protoc --cpp_out=. contact.proto

Après exécution, les fichiers contact.pb.h et contact.pb.cc apparaissent.

Étape 3 : Écrire le code C++

Fichier main.cpp :

#include <iostream>
#include <fstream>
#include "contact.pb.h"

using namespace std;

int main() {
    // Vérifions que la bibliothèque est initialisée
    GOOGLE_PROTOBUF_VERIFY_VERSION;

    // 1. Créer un objet Person et le remplir
    tutorial::Person per                    

Recommendations