在debian/ubuntu系统下,须要作以下准备操做:linux
$ [sudo] apt-get install build-essential autoconf libtool pkg-config
若是你想要从源码编译而且运行测试,同时运行下面的安装:c++
$ [sudo] apt-get install libgflags-dev libgtest-dev $ [sudo] apt-get install clang libc++-dev
下拉源代码信息(包括子模块)git
在编译以前,你须要下拉grpc的github仓库,而且下载grpc的一些依赖库,具体操做以下:github
$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc $ cd grpc $ git submodule update --init
protoc安装golang
默认grpc使用protobuf,你须要protoc编译器来生成服务端和客户端的通讯代码。若是你尚未安装protoc编译器,能够考虑编译位于third_party中的protoc。ubuntu
你可使用下面的指令安装:bash
$ cd grpc/third_party/protobuf $ make && [sudo] make install # ‘make’ should have been run by core grpc
在grpc根目录调用以下命令:curl
$ make $ make install
这样,grpc将会安装到你的系统目录中。测试
注意:使用make install安装以后,想要卸载grpc会比较困难。若是你以后想要移除grpc,或者想要升级到一个新的版本,这将会是个问题。对于这个问题,你能够修改Makefile中的prefix定义,在Makefile中,prefix原定义是 prefix ?= /usr/local 。ui
若是你但愿将grpc安装到其余目录,这个须要使用以下的步骤:
(1) 修改make调用的Makefile文件中的prefix为你所想要安装的目录(这里假设为/xxx/yyy)
(2) 修改~/.bashrc中的PATH变量(用于查找grpc的plugin插件),设置以下:
export PATH=$PATH:/xxx/yyy/bin
(3) 修改~/.bashrc 中的PKG_CONFIG_PATH变量,设置以下:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/xxx/yyy/lib/pkgconfig
(4) 修改~/.bashrc 中的 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH(用于查找头文件位置)和LD_LIBRARY_PATH变量,设置以下:
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/xxx/yyy/include export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/xxx/yyy/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/xxx/yyy/lib
export LIBRARY_PATH=$LIBRARY_PATH:/xxx/yyy/lib
(5) 调用source ~/.bashrc使设置生效
(6) 设置动态库查找位置
在/etc/ld.so.conf.d中新建grpc.conf文件,在其中添加/xxx/yy/lib目录
而后调用ldconfig,使动态库设置生效
(7) 若是你想要编译grpc中自带的例子(examples),须要修改/xxx/yyy/lib/pkgconfig/grpc++.pc文件,修改prefix为/xxx/yyy。而后修改例子中的Makefile,在LD_FLAGS中移除-L/usr/local/lib。而后调用make clean, make进行编译。
关于在linux中安装go语言版本的grpc (这里不包括安装protoc,若是你须要安装protoc,能够参考博客中的《在linux中安装protobuf编译器和运行时环境》)
首先确保你使用的go语言版本为go1.6或者更高。你能够调用以下命令:
$ go version
安装grpc
安装方法为:
$ go get -u google.golang.org/grpc
若是上述命令出现超时的问题,你能够采起下面的方式:
$ git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
对于其中的golang.org/x/net,你也须要作相似的操做:
$ git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net
对于使用go1.11及以上版本的,能够考虑使用go mod的replace特性来建立golang.org包的一个别名(这个我没有实际操做过)。在你的项目目录调用:
$ go mod edit -replace=google.golang.org/grpc=github.com/grpc/grpc-go@latest
$ go mod tidy
$ go mod vendor
$ go build -mod=vendor
对于须要使用的golang.org/x/net库,也须要作相似的操做。