天天看点

C++ gRPC 环境搭建

(os: ubuntu 16.04)

1. 下载gRPC源码

1.1 git拉取

   在网络可以连接到github的情况下, 只需要简单的一条命令就可以拉取到所有需要的源码   

   git clone --recurse-submodules -b v1.37.1 https://github.com/grpc/grpc   

   但是, 网络无法很顺畅的连接到github,  将拉取地址中的github.com替换成镜像站的网址                   github.com.cnpmjs.org,如果此镜像站出现问题请重新搜索可用的镜像站地址。 

1.2 submodule拉取

   注意下面的git指令, 使用了--recurse-submodules, 会同时拉取该git项目依赖的submodule,   

   git clone --recurse-submodules -b v1.37.1 https://github.com/grpc/grpc

   如果网络不佳,我们可手动替换了上面命令中的拉取地址, 如下所示   

   git clone --recurse-submodules -b v1.37.1 https://github.com.cnpmjs.org/grpc/grpc

   但是此时submodule中的地址仍然是github.com, 没有经过替换, 所以此时拉取仍然会失败, 经过

   网上检索到的信息, 提供一个解决方案, 先不拉取submodule, 使用如下的git命令

   git clone -b v1.37.1 https://github.com.cnpmjs.org/grpc/grpc

   成功拉取到代码后, 进入代码目录, 打开.gitmodules修改submodule地址, 替换所有github.com为     镜像地址(github.com.cnpmjs.org). 然后执行git submodule sync, 重新同步submodule的url.

   上述操作成功之后执行以下命令

   git submodule update --init

   拉取submodule, 一切顺利的话gRPC相关的源码即全部拉取成功.    

2. 编译gRPC代码

2.1 基础工具

2.1.1 cmake

       截至(2021.5.19)官方文档要求需要cmake版本高于3.13. 可通过一下命令查看自己当前cmake的版本

       cmake --version

       如果不符合要求, 需要进行升级替换符合要求的版本, 此处不详细叙述如何升级cmake,提供一个供

       参考的网址(https://askubuntu.com/questions/829310/how-to-upgrade-cmake-in-ubuntu).

       下载cmake高版本:https://github.com/Kitware/CMake/releases/download/v3.20.2/cmake-3.20.2.tar.gz 后编译默认安装即可。    

2.1.2 其他相关工具

      执行以下命令就可以完成其他所需工具的安装

      sudo apt install -y build-essential autoconf libtool pkg-config

      必须确保这些工具安装成功,尤其是pkg-config ,否则后续编译案例 helloword 会出错。

2.2 开始编译

2.2.1 编译gRPC

     为了方便后续操作, 先切换到超级用户然后进行操作, 执行以下命令切换到超级用户

     sudo su

     之后输入密码, 当@前面的符号显示为root之后说明成功切换到超级用户.

     进入grpc代码目录

     1、在当前目录执行make, 编译gRPC,再执行make install 进行默认安装

     2、再进入third_party/protobuf 下执行./configure 生成makefile 后继续执行make 再次make install 默认安装即可。(这一步至关重要,将protobuf可执行程序,静动态库以及头文件安装到默认目录,保证编译example顺利进行)

2.2 测试程序检查

    进入grpc代码目录, 进入helloworld测试程序目录, 

    cd examples/cpp/helloworld

    进入到该目录下, 执行下面指令使用cmake 生成makefile

    成功之后进行 make 编译, 当前目录会生成相应的服务端和客户端可执行程序

    首先启动 greeter_server 进程, 然后另开一个终端启动 greeter_client,

    当屏幕上出现 "Greeter received: Hello world" 说明成功

2.3 利用protobuf生成c++代码

protoc [proto file path] --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` --grpc_out=[output fold path]

protoc [proto file path] --cpp_out= [output fold path]

继续阅读