linux下安裝grpc插件 (c++和go語言)

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

在編譯以前,你須要下拉grpcgithub倉庫,而且下載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變量(用於查找grpcplugin插件),設置以下:

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 modreplace特性來建立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庫,也須要作相似的操做。

相關文章
相關標籤/搜索