官方文档
安装cmake
- Linux
sudo apt install -y cmake
- mac
brew install cmake
终端输入以下命令查看版本:
cmake --version
cmake version 3.21.2
安装gRPC的其他工具
下面有gRPC的依赖工具:
- Linux
sudo apt install -y build-essential autoconf libtool pkg-config
- mac
brew install autoconf automake libtool pkg-config
克隆grpc及其子模块
git clone --recurse-submodules -b v1.40.0 https://github.com/grpc/grpc
构建和安装 gRPC 和协议缓冲区
以下命令构建并在本地安装 gRPC 和 Protocol Buffers:
$ cd grpc
$ mkdir -p cmake/build
$ pushd cmake/build
$ cmake -DgRPC_INSTALL=ON \
-DgRPC_BUILD_TESTS=OFF \
-DCMAKE_INSTALL_PREFIX=`/usr/local/gRPC` \
../..
$ make -j
$ make install
$ popd
这里需要将安装路径的bin目录放到系统环境内!!!
Mac
使用如下命令打开配置文件:
vim ~/.bash_profile
将下面复制进去,保存退出
export PATH=$PATH:/usr/local/gRPC/bin
Linux
使用如下命令打开配置文件:
vim ~/.bashrc
将下面复制进去,保存退出
export PATH=$PATH:/usr/local/gRPC/bin
构建示例
这部分代码包含在上面克隆的仓库内。
1、切换到示例目录:
cd examples/cpp/helloworld
2、使用cmake以下命令构建示例:
$ mkdir -p cmake/build
$ pushd cmake/build
$ cmake -DCMAKE_PREFIX_PATH=`/usr/local/gRPC` ../..
$ make -j
在这里make -j时遇见了一个错误:
/usr/local/gRPC/include/grpcpp/impl/codegen/sync.h:35:10: fatal error: 'absl/synchronization/mutex.h' file not found
#include "absl/synchronization/mutex.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
这是因为在目录下缺失文件造成,用下面的命令进行copy
sudo cp -r ./grpc/third_party/abseil-cpp/absl /usr/local/gRPC/include
/usr/local/gRPC
和上main保持一致,即安装gRPC的目录。
然后重新执行make -j4,成功后在build目录下已经生成可执行文件。
huzd@huzddeMacBook-Pro build % ls
CMakeCache.txt greeter_async_client greeter_callback_server helloworld.grpc.pb.h
CMakeFiles greeter_async_client2 greeter_client helloworld.pb.cc
Makefile greeter_async_server greeter_server helloworld.pb.h
cmake_install.cmake greeter_callback_client helloworld.grpc.pb.cc libhw_grpc_proto.a
运行服务:
huzd@huzddeMacBook-Pro build % ./greeter_server
Server listening on 0.0.0.0:50051
运行客户:
huzd@huzddeMacBook-Pro build % ./greeter_client
Greeter received: Hello world
huzd@huzddeMacBook-Pro build % ./greeter_client
Greeter received: Hello world
huzd@huzddeMacBook-Pro build % ./greeter_client
Greeter received: Hello world
huzd@huzddeMacBook-Pro build %
已经实现功能的调用。