CentOS7下安装gRPC for CPP
[版权声明] 本站内容采用 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆 (CC BY-NC-SA 3.0 CN) 进行许可。
部分内容和资源来自网络,纯学习研究使用。如有侵犯您的权益,请及时联系我,我将尽快处理。
如转载请注明来自: Broly的博客,本文链接: CentOS7下安装gRPC for CPP
gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C#。
gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
测试环境:
系统是新安装的CentOS 7.2
Shell
1 2 | [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) |
一、YUM安装相关工具
Shell
1 2 | yum install -y gcc-c++ autoconf libtool yum groupinstall -y "Development Tools" |
二、下载gRPC源码和相关子模块
这步可能出现失败或者网速慢的情况(原因你懂的),多执行几次直到完全下载完毕为止。
Shell
1 2 3 | git clone https://github.com/grpc/grpc.git cd grpc git submodule update --init |
三、编译安装protobuf
这个步骤有个地方要下载googlecode的里面的代码,国内正常来说是下载不下来的(除非有梯子),所以要换个下载地址:
Shell
1 2 | [root@localhost grpc]# cd third_party/protobuf/ [root@localhost protobuf]# vim autogen.sh |
找到这行:
Shell
1 | curl $curlopts -O https://googlemock.googlecode.com/files/gmock-1.7.0.zip |
修改为:
Shell
1 | curl $curlopts -L -o gmock-1.7.0.zip https://github.com/peter-wangxu/gMock/archive/1.7.0.zip |
然后编译安装即可:
Shell
1 2 3 4 5 6 7 8 9 | [root@localhost protobuf]# ./autogen [root@localhost protobuf]# ./configure [root@localhost protobuf]# make [root@localhost protobuf]# make install [root@localhost protobuf]# ldconfig # refresh shared library cache. [root@localhost protobuf]# which protoc /usr/local/bin/protoc [root@localhost protobuf]# protoc --version libprotoc 3.0.0 |
四、编译安装gRPC
1 2 3 | [root@localhost protobuf]# cd ../.. [root@localhost grpc]# make [root@localhost grpc]# make install |
执行make install的时候,我这里有错误提示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Warning: it looks like protoc 3.0.0+ isn't installed on your system, which means that you won't be able to compile .proto files for use with gRPC.
If you are just using pre-compiled protocol buffers, or you otherwise have no need to compile .proto files, you can ignore this.
If you do need protobuf for some reason, you can download and install it from:
https://github.com/google/protobuf/releases
Once you've done so, you can re-run this check by doing:
make verify-install |
明明是有安装protoc的,但是没检测到,网上找了资料说这个问题好像是不影响的。
五、Demo测试
官方自带有个HelloWorld的Demo,可以编译这个Demo看是否我们已经安装成功了。
1 2 | [root@localhost grpc]# cd examples/cpp/helloworld/ [root@localhost helloworld]# make |
结果报错了:
1 2 3 4 5 6 7 | Package grpc++ was not found in the pkg-config search path. Perhaps you should add the directory containing `grpc++.pc' to the PKG_CONFIG_PATH environment variable No package 'grpc++' found Package grpc was not found in the pkg-config search path. Perhaps you should add the directory containing `grpc.pc' to the PKG_CONFIG_PATH environment variable |
意思是找不到环境变量PKG_CONFIG_PATH,解决方法是把环境变量加上去:
在gRPC目录下保存文件actviate.sh:
1 2 3 4 5 6 | DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" export PATH=$PATH:$DIR/bins/opt:$DIR/bins/opt/protobuf export CPATH=$DIR/include:$DIR/third_party/protobuf/src export LIBRARY_PATH=$DIR/libs/opt:$DIR/libs/opt/protobuf export PKG_CONFIG_PATH=$DIR/libs/opt/pkgconfig:$DIR/third_party/protobuf export LD_LIBRARY_PATH=$DIR/libs/opt |
然后执行:
Shell
1 2 3 | [root@localhost grpc]# source actviate.sh [root@localhost grpc]# cd examples/cpp/helloworld/ [root@localhost helloworld]# make |
编译成功。(注意,每次新开终端编译或运行程序,都要执行actviate.sh,除非把环境变量设成永久有效)
然后运行服务端,监听的是50051端口:
Shell
1 2 3 4 | [root@localhost helloworld]# ./greeter_server I0719 09:09:11.798702503 5076 ev_epoll_linux.c:85] epoll engine will be using signal: 36 D0719 09:09:11.798857929 5076 ev_posix.c:106] Using polling engine: epoll Server listening on 0.0.0.0:50051 |
在另外一个终端执行客户端程序:
1 2 3 4 | [root@localhost helloworld]# ./greeter_client I0719 09:10:04.431843293 5142 ev_epoll_linux.c:85] epoll engine will be using signal: 36 D0719 09:10:04.432006262 5142 ev_posix.c:106] Using polling engine: epoll Greeter received: Hello world |
成功!