gRPCのビルド
CMAKEが通るようにgRPCをビルド・インストールします。
abseil-cpp と protobuf 以外は apt でインストールしても行けそうですが
テストスクリプト と同じく openssl だけ apt でインストールしました。
$ sudo apt install -y \
autoconf \
build-essential \
cmake \
git \
libtool \
pkg-config
$ sudo apt install -y libssl-dev
grpcソースの取得
$ git clone --recursive -b v1.27.3 https://github.com/grpc/grpc.git
abslのインストール
$ cd grpc/third_party/abseil-cpp
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE ..
$ make -j
$ sudo make install
$ sudo ldconfig
c-aresのインストール
$ cd grpc/third_party/cares/cares
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make -j
$ sudo make install
$ sudo ldconfig
zlibのインストール
$ cd grpc/third_party/zlib
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make -j
$ sudo make install
$ sudo ldconfig
protobufのインストール
$ cd grpc/third_party/protobuf/cmake
$ mkdir build
$ cd build
$ cmake -Dprotobuf_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release ..
$ make -j
$ sudo make install
$ sudo ldconfig
gRPCのインストール
$ cd grpc
$ mkdir build
$ cd build
$ cmake \
-DCMAKE_BUILD_TYPE=Release \
-DgRPC_INSTALL=ON \
-DgRPC_BUILD_TESTS=OFF \
-DgRPC_CARES_PROVIDER=package \
-DgRPC_ABSL_PROVIDER=package \
-DgRPC_PROTOBUF_PROVIDER=package \
-DgRPC_SSL_PROVIDER=package \
-DgRPC_ZLIB_PROVIDER=package \
..
$ make -j
$ sudo make install
$ sudo ldconfig
テスト
$ cd grpc/examples/cpp/helloworld
$ mkdir build
$ cd build
$ cmake ..
$ make -j
サーバ
$ cd grpc/examples/cpp/helloworld/build
$ ./greeter_server
Server listening on 0.0.0.0:50051
クライアント
$ cd grpc/examples/cpp/helloworld/build
$ ./greeter_client
Greeter received: Hello world
ライブラリだけ使うCmake
CMakeLists.txt
cmake_minimum_required(VERSION 3.5.1)
project(sample-grpc)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
find_package(Threads)
find_package(Protobuf CONFIG REQUIRED)
find_package(gRPC CONFIG REQUIRED)
add_executable(sample-grpc-bin ${CMAKE_CURRENT_SOURCE_DIR}/main.cc)
target_link_libraries(sample-grpc-bin
Threads::Threads
protobuf::libprotobuf
gRPC::grpc++_unsecure)
set_target_properties(sample-grpc-bin PROPERTIES OUTPUT_NAME sample)