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

$ [sudo] apt-get install build-essential autoconf libtool pkg-config

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

$ [sudo] apt-get install libgflags-dev libgtest-dev
$ [sudo] apt-get install clang 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] make install # ‘make’ should have been run by core grpc 

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

$ make
$ make install

这样,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库,也需要做类似的操作。

linux下安装grpc插件 (c++和go语言)的更多相关文章

  1. Linux下安装MySQL数据库以及用C语言编程存取数据库

    ubuntu下安装软件相当简单,一条简单的 apt-get install 就可以解决,相比源码安装方式唯一的缺点就是,你无法自定义软件的安装目录.不过这也不是什么太大的缺点.下面我们就用 apt-g ...

  2. Linux下安装redis 3.0及C语言中客户端实现demo

    1.获取安装文件 wget http://download.redis.io/redis-stable.tar.gz 2.解压文件 tar xzvf redis-stable.tar.gz 3.进入目 ...

  3. Linux 下安装配置 JDK7

    Linux 下安装配置 JDK7 配置环境(debian 7) 自从从Oracle收购Sun近三年来,已经有很多变化.早在8月,甲骨文将“Operating System Distributor Li ...

  4. Linux下安装loadrunner步骤及遇到的问题

    Linux下实现压力测试,只能在Linux下安装加压器---load-generator,然后通过本地录制脚本,通过loadrunner controller 的Scenario-->Load ...

  5. 在Linux下安装eclipse

    在Linux下安装eclipse 今天上午终于在Linux下把eclipse安装上去了,前几天尝试了一次,失败了,不知道是软件版本的问题还是我自己的原因,估计还是我自己的原因占多数!下面把这次成功的经 ...

  6. Linux下安装破解JIRA 6.3.6 并连接MYSQL5

    序言 JIRA是澳大利亚 Atlassian 公司开发的一款优秀的问题跟踪管理软件工具,可以对各种类型的问题进行跟踪管理,包括缺陷.任务.需求.改进等.JIRA采用J2EE技术,能够跨平台部署.它正被 ...

  7. 自动化服务部署(二):Linux下安装jenkins

    jenkins是一个Java开发的开源持续集成工具,广泛用于项目开发,具有自动化构建.测试和部署等功能,它的运行需要Java环境. 上篇博客介绍了Linux下安装JDK的步骤,这篇博客,介绍下Linu ...

  8. linux 下安装 php kafka 扩展

    我们使用官方推荐 php kafka 扩展 phpkafka,由于该扩展是基于 librdkafka 开发,所以我们首先需要安装 librdkafka 下载地址:http://kafka.apache ...

  9. 环境部署(二):Linux下安装jenkins

    jenkins是一个Java开发的开源持续集成工具,广泛用于项目开发,具有自动化构建.测试和部署等功能,它的运行需要Java环境. 上篇博客介绍了Linux下安装JDK的步骤,这篇博客,介绍下Linu ...

随机推荐

  1. docker登录报错Error response from daemon: Get https://192.168.30.10/v1/users/: dial tcp 192.168.30.10:443: connect: connection refused

    背景描述: 登录docker报错: [root@localhost sysconfig]# docker login 192.168.30.10 Username (newcs06): newcs06 ...

  2. 010-MySQL批量插入测试数据

    1.由于测试需要 需要将数据插入到百万级别,故需要使用循环语句,循环参看:009-MySQL循环while.repeat.loop使用 方式三.使用values批量插入[[推荐答案]] 基础格式 IN ...

  3. [Math] From Prior to Posterior distribution

    贝叶斯统计推断 后验分布与充分性 无信息先验下的后验分布 共轭先验(conjugacy)下的后验分布 其中,正态分布的共轭先验推导过程,典型且重要. (1) 当方差已知时,均值(prior: 高斯分布 ...

  4. mybatis自动生成后无法获取主键id问题

    使用mybatis的自动生成工具生成的主键id: <selectKey resultType="java.lang.Integer" keyProperty="id ...

  5. (转)深入浅出Redis-redis哨兵集群

    背景:对于后台开发,需要了解与集群相关的工作. 深入浅出Redis-redis哨兵集群 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentin ...

  6. 学习数据结构Day2

    之前学习过了数组的静态实现方法,同时将数组的所有有可能实现的方法都统一实现了一遍,之后支持了泛型的相关 概念,接下来就是如何对数组进行扩容的操作也就是实现动态数组. private void resi ...

  7. LeetCode 506. 相对名次(Relative Ranks) 39

    506. 相对名次 506. Relative Ranks 题目描述 给出 N 名运动员的成绩,找出他们的相对名次并授予前三名对应的奖牌.前三名运动员将会被分别授予"金牌",&qu ...

  8. LeetCode 187. 重复的DNA序列(Repeated DNA Sequences)

    187. 重复的DNA序列 187. Repeated DNA Sequences 题目描述 All DNA is composed of a series of nucleotides abbrev ...

  9. 《TCP/IP - TCP/UDP》

    一:概述 - 由于 IP 的传输是无状态的,IP 提供尽力服务,但并不保证数据可以到达主机. - 所以,数据的完整性需要更上层的 传输层来保证.TCP和UDP 均属于 传输层. 二:UDP - 特点 ...

  10. MySQL运维中的Tips--持续更新

    1.into outfile 生成sql:一般都是生成文本或者其他形式的文件,现在需要生成sql形式的文件.配置文件加secure_file_priv=''select concat('insert ...