gRPC没有提供C++版本的ubuntu 16.04 预编译包,所以需要通过源码自行编译安装。
官方git库地址:https://github.com/grpc/grpc
由于github上部分较大的库下载很慢,所以我把所有相关的库镜像到国内的gitee上了,地址:https://gitee.com/zch-grpc/grpc
- 下载代码:
git clone https://gitee.com/zch-grpc/grpc.git
cd grpc
- 选择要编译的版本,我选择的版本是v1.32.0
git checkout origin/zch-v1.32.0
-
根据相应版本的编译说明编译安装,参考https://github.com/grpc/grpc/blob/v1.32.0/BUILDING.md
- 下载依赖项,为了从gitee下载依赖项,我从tag v1.32.0创建了分支zch-v1.32.0,修改了.gitmodules文件中的库路径,如果选择其他版本可以参考修改
git submodule update --init
特殊说明:根据官方文档的说明,想要使用cmake编译并安装时,如果cmake版本低于3.13,需要使用以下命令生成makefile:
cmake ../.. -DgRPC_INSTALL=ON \
-DCMAKE_BUILD_TYPE=Release \
-DgRPC_ABSL_PROVIDER=package \
-DgRPC_CARES_PROVIDER=package \
-DgRPC_PROTOBUF_PROVIDER=package \
-DgRPC_SSL_PROVIDER=package \
-DgRPC_ZLIB_PROVIDER=package
生成过程中可能会提示absl库找不到等错误,此时说明系统中没有预安装这些库,需要先安装相应的库。
以absl为例,下载依赖项时已经将源码下载到third_party/abseil-cpp目录下,只需要到该目录下进行编译安装即可,注意:需要编译安装动态库(.so)版本
cd third_party/abseil-cpp
mkdir build
cd build
cmake -DCMAKE_CXX_STANDARD=11 -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
cd ../../..
2. 编译安装
mkdir -p cmake/build
cd cmake/build
cmake ../.. -DgRPC_INSTALL=ON \
-DCMAKE_BUILD_TYPE=Release \
-DgRPC_ABSL_PROVIDER=package \
-DgRPC_SSL_PROVIDER=package \
-DgRPC_ZLIB_PROVIDER=package \
-DgRPC_RE2_PROVIDER=package
make
sudo make install
注意:如果cmake时有类似 gRPC_INSTALL will be forced to FALSE because gRPC_RE2_PROVIDER is “module” 输出说明需要将相应的模块设置为package模式才能实现grpc安装,如果改为package模式后cmake提示找不到相应的模块,需要手工安装该模块。
3. 编译示例程序,验证
cd examples/cpp/helloworld
mkdir build
cd build
cmake ..
make
先运行 ./greeter_server
再运行 ./greeter_client
会输出
Greeter received: Hello world
说明安装运行正确。
- 与python版本交互
python版本的安装并没有碰到问题,就不特殊说明了,请参考官方文档。
在另外一台机器上运行python版本的server:
cd examples/python3
python3 greeter_server.py
在本地运行C++版本的client,需要指定服务器地址和端口:
./greeter_client --target=172.17.0.2:50051
同样会输出:
Greeter received: Hello, world!
说明安装运行正确。