linux下安装grpc插件 (c++和go语言)

在debian/ubuntu系统下,需要做如下准备操作:

$ [sudo] apt-getinstallbuild-essential autoconf libtoolpkg-config

如果你想要从源码编译并且运行测试,同时运行下面的安装:

$ [sudo] apt-getinstalllibgflags-dev libgtest-dev

$ [sudo] apt-getinstallclang libc++-dev

下拉源代码信息(包括子模块)

在编译之前,你需要下拉grpc的github仓库,并且下载grpc的一些依赖库,具体操作如下:

$ git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc$ cd grpc

$ git submodule update --init

protoc安装

默认grpc使用protobuf,你需要protoc编译器来生成服务端和客户端的通信代码。如果你还没有安装protoc编译器,可以考虑编译位于third_party中的protoc。

你可以使用下面的指令安装:

$ cd grpc/third_party/protobuf

$ make&& [sudo]makeinstall# ‘make’ should have been run by core grpc

在grpc根目录调用如下命令:

$make$ makeinstall

这样,grpc将会安装到你的系统目录中。


注意:使用make install安装之后,想要卸载grpc会比较困难。如果你之后想要移除grpc,或者想要升级到一个新的版本,这将会是个问题。对于这个问题,你可以修改Makefile中的prefix定义,在Makefile中,prefix原定义是  prefix ?= /usr/local 。

如果你希望将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库,也需要做类似的操作。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342