· 

gRPCやってみる(5)

 C++でgRPCクライアントを作成したい。
gRPCはgoogleが開発したものなはずで、ってことはdotnet縛りってことはないよね。試してみる。
gRPCの公式ページからC++を選択すると、Quick startに飛ばされるので、これに従ってやってみる。ざっと見た感じWindowsではなくLinuxを想定しているっぽいのでWSLで。

hoge@Inspiron:~$ export MY_INSTALL_DIR=$HOME/.local
hoge@Inspiron:~$ mkdir -p $MY_INSTALL_DIR
hoge@Inspiron:~$ export PATH="$MY_INSTALL_DIR/bin:$PATH"
hoge@Inspiron:~$ sudo apt install -y cmake
[sudo] password for hoge:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
cmake is already the newest version (3.22.1-1ubuntu1.22.04.1).
0 upgraded, 0 newly installed, 0 to remove and 30 not upgraded.
hoge@Inspiron:~$ cmake --version
cmake version 3.22.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).
hoge@Inspiron:~$ wget -q -O cmake-linux.sh https://github.com/Kitware/CMake/releases/download/v3.19.6/cmake-3.19.6-Linux-x86_64.sh
hoge@Inspiron:~$ sh cmake-linux.sh -- --skip-license --prefix=$MY_INSTALL_DIR
CMake Installer Version: 3.19.6, Copyright (c) Kitware
This is a self-extracting archive.
The archive will be extracted to: /home/hoge/.local

Using target directory: /home/hoge/.local
Extracting, please wait...

Unpacking finished successfully
hoge@Inspiron:~$ rm cmake-linux.sh
hoge@Inspiron:~$ sudo apt install -y build-essential autoconf libtool pkg-config
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
autoconf is already the newest version (2.71-2).
autoconf set to manually installed.
build-essential is already the newest version (12.9ubuntu3).
libtool is already the newest version (2.4.6-15build2).
pkg-config is already the newest version (0.29.2-1ubuntu3).
pkg-config set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 30 not upgraded.
hoge@Inspiron:~$

言われたとおりにやりまくったらこうなった。
cmakeにしてもその他のアプリにしても実はすべてすでにインストールされていた状態でのログなのであまり後で参考になるような情報はない。
sh cmake-linux.sh -- --skip-license --prefix=$MY_INSTALL_DIR
が何をやってくれたのか、
まぁ、こんな感じで何かを展開してくれている。

で、quickstartによると、grpcリポジトリのクローンを作成する。
$ git clone --recurse-submodules -b v1.58.0 --depth 1 --shallow-submodules https://github.com/grpc/grpc
ってすると、クッソ長いこと何かをやる。
grpcってフォルダを作ってその中にめっちゃたくさん展開される。
で、
gRPC とプロトコル バッファーをビルドしてインストールする
ってところを進めていく、すなわちこうやっていくと、
hoge@Inspiron:~$ cd grpc
hoge@Inspiron:~/grpc$ mkdir -p cmake/build
hoge@Inspiron:~/grpc$ pushd cmake/build
~/grpc/cmake/build ~/grpc
hoge@Inspiron:~/grpc/cmake/build$ cmake -DgRPC_INSTALL=ON \
      -DgRPC_BUILD_TESTS=OFF \
      -DCMAKE_INSTALL_PREFIX=$MY_INSTALL_DIR \
      ../..
いやー普段CMake使わんからなんのこっちゃかだよ。でどうやら
ってなっているから。いろんな行き違いでこうなったんやろう。CMake使わんからわからん。で、CMAKE_ROOTは~/.local/share/cmake-3.19って教えてやることにする。
で、~/.bashrcに
export CMAKE_ROOT="$HOME/.local/share/smake-3.19"
を追加して、
source ./.bashrc
って反映させると
エラーはなくなったけど、PCに元から入っていたCMake 3.22を使いたくなった時に困っちゃうな、、、まぁないと思うけど。
で、grpcフォルダで再度
hoge@Inspiron:~/grpc/cmake/build$ cmake -DgRPC_INSTALL=ON \
      -DgRPC_BUILD_TESTS=OFF \
      -DCMAKE_INSTALL_PREFIX=$MY_INSTALL_DIR \
      ../..
ってすると、なんじゃかんじゃ執り行われる。
そして
make -j 4
make install
popd
ってする。make -j 4はめっちゃ時間がかかる。だから-j 4を推奨しているんやろうけど。
で、helloworldをビルドして実行して、サーバーを起動。
別のターミナルから、クライアントを起動。
まぁちゃんとできているっぽい。
ここから自分用のものを作っていくわけだが、しんどいので、一旦、筆を置く。