protobuf C++: Komplette Anleitung mit Code-Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was sind Protocol Buffers (protobuf) und warum braucht man sie?

Protocol Buffers (protobuf) sind ein leistungsstarker, effizienter und erweiterbarer Mechanismus zur Serialisierung strukturierter Daten, entwickelt von Google. Sie definieren die Datenstruktur einmal in einer speziellen Datei (.proto) und generieren dann Quellcode für verschiedene Programmiersprachen (C++, Java, Python, Go u.a.) zum Lesen und Schreiben dieser Daten.

Warum protobuf verwenden?

  • Effizienz: Protobuf serialisiert Daten in ein binäres Format, das deutlich kompakter und schneller zu verarbeiten ist als textbasierte Formate wie XML oder JSON. Das ist besonders wichtig für hochlastige Systeme und Microservices.
  • Geschwindigkeit: Serialisierung und Deserialisierung sind um ein Vielfaches schneller als bei herkömmlichen Textformaten.
  • Typsicherheit: Der generierte Code erzwingt eine strenge Typisierung, was Laufzeitfehler reduziert.
  • Plattformunabhängigkeit und Mehrsprachigkeit: Einmal definiert, kann das Datenschema in C++, Python, Java und anderen Sprachen genutzt werden.
  • Abwärtskompatibilität: Protobuf unterstützt die Weiterentwicklung des Datenschemas: Neue Felder können hinzugefügt werden, ohne alte Anwendungsversionen zu beschädigen.

Installation von protobuf für C++

Um protobuf in C++ zu nutzen, müssen zwei Komponenten installiert werden: der Compiler protoc (wandelt .proto-Dateien in C++-Code um) und die protobuf-Bibliothek für C++.

1. Installation des Compilers protoc

Der einfachste Weg ist der Download eines vorkompilierten Binärpakets von der offiziellen GitHub-Release-Seite von protobuf.

# Beispiel für Linux (Ubuntu/Debian)
sudo apt-get install protobuf-compiler

# Beispiel für macOS (über Homebrew)
brew install protobuf

# Für Windows: protoc-x.x.x-win64.zip herunterladen und den Pfad zu protoc.exe in die Umgebungsvariable PATH aufnehmen

2. Installation der protobuf-Bibliothek für C++

Es wird empfohlen, die Bibliothek aus dem Quellcode zu bauen oder einen Paketmanager zu verwenden.

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

# macOS (Homebrew)
brew install protobuf

# Bau aus dem Quellcode (universelle Methode)
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. CMake-Projekt konfigurieren (empfohlen)

Fügen Sie Folgendes in Ihre CMakeLists.txt ein:

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

# Automatische Kompilierung der .proto-Dateien
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})

Schnellstart mit einem Code-Beispiel

Erstellen wir ein einfaches Beispiel, um die Grundlagen zu demonstrieren. Wir definieren eine Datenstruktur für einen Kontakt.

Schritt 1: .proto-Datei erstellen

Datei contact.proto:

syntax = "proto3";

package tutorial;

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

Schritt 2: C++-Code generieren

protoc --cpp_out=. contact.proto

Nach der Ausführung erscheinen die Dateien contact.pb.h und contact.pb.cc.

Schritt 3: C++-Code schreiben

Datei main.cpp:

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

using namespace std;

int main() {
    // Sicherstellen, dass die Bibliothek initialisiert ist
    GOOGLE_PROTOBUF_VERIFY_VERSION;

    // 1. Person-Objekt erstellen und befüllen
    tutorial::Person per                    

Empfehlungen