Erstellen Sie eine Umgebung für Protobuf (3.6.1) und gRPC (v1.18.0) unter Ubuntu 18.04.
Zwischen Protobuf und gRPC besteht eine Versionsabhängigkeit.
In der Entwicklungsumgebung kann der neueste Protobuf (3.13.0) nicht verwendet werden. Verwenden Sie daher den unterstützten Protobuf (3.6.1). Da der neueste gRPC (1.32.0) nicht mit dem alten Protobuf (3.6.1) kompiliert werden kann, verwenden Sie gRPC (v1.18.0) mit Protobuf (3.6.1).
Referenz: Einführung in die neue Technologie "gRPC" für die Kommunikation zwischen Diensten
Sie können protobuf auch aus dem protobuf-Repository und dem Ordner gRPC Third_Party / Protobuf installieren.
Wenn Sie es bereits mit apt-get installiert haben, deinstallieren Sie es. (Der Protobuf von apt-get ist 3.0.0)
sudo apt-get remove protobuf-compiler
sudo apt-get remove libprotobuf-dev
sudo apt-get remove libprotobuf-lite10
sudo apt-get install autoconf automake libtool curl make g++ unzip
git clone -b 3.6.x https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig # refresh shared library cache.
--Überprüfen Sie die Version von Protobuf
$ protoc --version
libprotoc 3.6.1
$ which protoc
/usr/local/bin/protoc
Installieren Sie in $ HOME / .local.
$ export MY_INSTALL_DIR=$HOME/.local
$ mkdir -p $MY_INSTALL_DIR
$ export PATH="$PATH:$MY_INSTALL_DIR/bin"
Füge PATH zu ~ / .bashrc hinzu
export PATH=$PATH:$HOME/.local/bin
$ sudo apt-get install cmake
$ cmake --version
cmake version 3.10.2
Sie benötigen cmake Version 3.13 oder höher, installieren Sie also einen neuen cmake.
$ wget -q -O cmake-linux.sh https://github.com/Kitware/CMake/releases/download/v3.17.0/cmake-3.17.0-Linux-x86_64.sh
$ sh cmake-linux.sh -- --skip-license --prefix=$MY_INSTALL_DIR
$ rm cmake-linux.sh
--Installation der Voraussetzungen
$ sudo apt-get install build-essential autoconf libtool pkg-config libssl-dev
$ git clone --recurse-submodules -b v1.18.0 https://github.com/grpc/grpc
$ cd grpc
cd third_party/cares/cares
git fetch origin
git checkout cares-1_13_0
mkdir -p cmake/build
cd cmake/build
cmake -DCMAKE_BUILD_TYPE=Release ../..
sudo make -j4 install
rm -rf third_party/cares/cares # wipe out to prevent influencing the grpc build
cd third_party/zlib
mkdir -p cmake/build
cd cmake/build
cmake -DCMAKE_BUILD_TYPE=Release ../..
sudo make -j4 install
rm -rf third_party/zlib # wipe out to prevent influencing the grpc build
Nicht erforderlich, wenn bereits aus dem Protobuf-Repository installiert. Es ist in Ordnung, von Drittanbieter / Protobuf neu zu installieren.
cd third_party/protobuf
mkdir -p cmake/build
cd cmake/build
cmake -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release ..
sudo make -j4 install
rm -rf third_party/protobuf # wipe out to prevent influencing the grpc build
cd grpc
mkdir -p cmake/build
cd cmake/build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DgRPC_INSTALL=ON \
-DgRPC_BUILD_TESTS=OFF \
-DgRPC_CARES_PROVIDER=package \
-DgRPC_PROTOBUF_PROVIDER=package \
-DgRPC_SSL_PROVIDER=package \
-DgRPC_ZLIB_PROVIDER=package \
-DCMAKE_INSTALL_PREFIX=$MY_INSTALL_DIR \
../..
make -j4 install
$ protoc --version
libprotoc 3.6.1
$ which protoc
/usr/local/bin/protoc
$ cd examples/cpp/helloworld
$ mkdir -p cmake/build
$ cd cmake/build
$ cmake ../..
$ make -j
$ ./greeter_server
# From a different terminal
$ ./greeter_client
Greeter received: Hello world
$ protoc \
--grpc_out=./codegen \
--cpp_out=./codegen \
--plugin=protoc-gen-grpc=`which grpc_cpp_plugin` \
./telemetry.proto
$ cd codegen
$ ls
telemetry.grpc.pb.cc telemetry.grpc.pb.h telemetry.pb.cc telemetry.pb.h
Recommended Posts