ubuntu18下grpc编译与安装

2023-10-27

grpc装起来很麻烦,会有很多坑。按照官方文档或者其他博客的步骤,不注意依赖库的版本页会导致各种问题。

0. 环境

在 https://grpc.io/docs/ grpc的环境依赖如下

Language OS Compilers / SDK
C/C++ Linux, Mac GCC 4.9+, Clang 3.4+
0.1 操作系统Ubuntu 18.04.4 LTS (腾讯云的虚拟机)

坑1:为了支持cpp11,gcc版本要4.9+,所以一些比较老的系统比如centos7.6,gcc默认4.8.5,是要升级gcc/g++的。升级gcc有两种方式

  • 编译安装,耗时长,软连接和libc的库需要手动更新,不推荐。
  • 使用centos-release-scl安装gcc, 升级方便快速
[root@VM-0-16-centos ~]# yum install centos-release-scl
[root@VM-0-16-centos ~]# yum install devtoolset-8-gcc*
[root@VM-0-16-centos ~]# scl enable devtoolset-8 bash
[root@VM-0-16-centos ~]# gcc -v
....
gcc version 4.9.0 (GCC) 

如果系统环境对自己不存在束缚,那么推荐直接上Ubuntu18,gcc目前版本是7.5,能够对开发有个良好的支撑,不用考虑兼容问题。

0.2 cmake版本

坑2:Ubuntu18 通过apt方式安装cmake的版本是 3.10.2。对grpc来说,太低了。所以我们直接安装目前的最高版本。
cmake3.20 目前是最新版本,方法如下
坑3: 如果wget慢的像乌龟,那么可以考虑用windows迅雷下载,然后导入linux系统中。如果系统中低版本的cmake,先卸载掉

wget https://cmake.org/files/v3.20/cmake-3.20.0-rc1-linux-x86_64.sh
cmake-3.20.0-rc1-linux-x86_64.sh --prefix=/usr/local --exclude-subdir
0.3 安装zlib

方法如下

wget http://www.zlib.net/zlib-1.2.11.tar.gz
tar -xvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
./configure
make
sudo make install

这一步如果不安装后面make编译会报zlib.h找不到

1. 复制代码库

坑4:直接从github上拉仓库会奇慢无比,最好用gitee倒一下。自己倒腾也行,用下面我的gitee也行。见本文最后.gitmodules 。

2. 拉取grpc ,指定版本v1.12.0

坑5:新版本我试了好几次,make那一步总出错,而且越补越漏。

git clone https://gitee.com/niubucai/grpc.git
cd grpc/ 
git tag 
git checkout v1.12.0
git submodule sync 
git submodule update --init
3. 单独安装protoc

将protoc更新到v3.6.1 make -j4是多和编译,-j后面的参数根据当前系统配置加快编译

cd third_party/protobuf
git tag
git checkout v3.6.1
./autogen.sh 
./configure
sudo make -j4
sudo make install
sudo ldconfig     
protoc --version  
4. 编译安装grpc 加参数 HAS_SYSTEM_PROTOBUF=false
cd ../../ # 这里是grpc的目录
make HAS_SYSTEM_PROTOBUF=false 
sudo make install 

注意修改下.gitmodules文件,内容如下,如果自己从GitHub上复制了这些库,也可以用自己的拷贝。

5. 测试helloworld
终端1:
ubuntu@VM-0-16-ubuntu:~/grpc$ cd examples/cpp/helloworld/
ubuntu@VM-0-16-ubuntu:~/grpc/examples/cpp/helloworld$ ./greeter_server 
Server listening on 0.0.0.0:50051
终端2:
ubuntu@VM-0-16-ubuntu:~/grpc/examples/cpp/helloworld$ ./greeter_client 
Greeter received: Hello world
附录

.gitmodules 文件

[submodule "third_party/zlib"]
        path = third_party/zlib
        url = https://gitee.com/niubucai/zlib.git
        # When using CMake to build, the zlib submodule ends up with a
        # generated file that makes Git consider the submodule dirty. This
        # state can be ignored for day-to-day development on gRPC.
        ignore = dirty
[submodule "third_party/protobuf"]
        path = third_party/protobuf
        url = https://gitee.com/niubucai/protobuf.git
[submodule "third_party/googletest"]
        path = third_party/googletest
        url = https://gitee.com/niubucai/googletest.git
[submodule "third_party/benchmark"]
        path = third_party/benchmark
        url = https://gitee.com/niubucai/benchmark
[submodule "third_party/boringssl"]
        path = third_party/boringssl
        url = https://gitee.com/niubucai/boringssl.git
[submodule "third_party/boringssl-with-bazel"]
        path = third_party/boringssl-with-bazel
        url = https://gitee.com/niubucai/boringssl.git
[submodule "third_party/re2"]
        path = third_party/re2
        url = https://gitee.com/niubucai/re2.git
[submodule "third_party/cares/cares"]
        path = third_party/cares/cares
        url = https://gitee.com/niubucai/c-ares.git
        branch = cares-1_12_0
[submodule "third_party/bloaty"]
        path = third_party/bloaty
        url = https://gitee.com/niubucai/bloaty.git
[submodule "third_party/abseil-cpp"]
        path = third_party/abseil-cpp
        url = https://gitee.com/niubucai/abseil-cpp.git
        branch = lts_2020_02_25
[submodule "third_party/envoy-api"]
        path = third_party/envoy-api
        url = https://gitee.com/niubucai/data-plane-api.git
[submodule "third_party/googleapis"]
        path = third_party/googleapis
        url = https://gitee.com/niubucai/googleapis.git
[submodule "third_party/protoc-gen-validate"]
        path = third_party/protoc-gen-validate
        url = https://gitee.com/niubucai/protoc-gen-validate.git
[submodule "third_party/udpa"]
        path = third_party/udpa
        url = https://gitee.com/niubucai/udpa.git
[submodule "third_party/libuv"]
        path = third_party/libuv
        url = https://gitee.com/niubucai/libuv.git
[submodule "third_party/opencensus-proto"]
        path = third_party/opencensus-proto
        url = https://gitee.com/niubucai/opencensus-proto.git
[submodule "third_party/gflags"]
        path = third_party/gflags
        url = https://gitee.com/niubucai/gflags.git

文章参考
[1] https://blog.csdn.net/qq_32460819/article/details/114708740
[2] https://grpc.io/docs/guides/
[3] https://grpc.io/docs/languages/cpp/quickstart/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu18下grpc编译与安装 的相关文章

随机推荐

  • 深入理解C++中的mutable关键字

    mutalbe的中文意思是 可变的 易变的 跟constant 既C 中的const 是反义词 在C 中 mutable也是为了突破const的限制而设置的 被mutable修饰的变量 将永远处于可变的状态 即使在一个const函数中 我们
  • element-ui -- 照片墙

    一 介绍 element ui提供了上传照片的组件 el upload能够给用户提供上传照片的服务 照片墙是指能够向服务器上传一组照片 二 基础使用
  • PHP基于Web的subversion用户管理系统(源代码+论文)

    本系统主要是基于Web的subversion系统的用户管理系统 在开源软件世界 并行版本系统 cvs 一直是版本控制长久以来的唯一选择 但是 和其它许多工具一样 cvs开始显露出衰老的迹象 而subversion 正是以cvs继任者的面目出
  • 华为mate10开机android,华为Mate 10双清教程

    Android手机使用一段时间后 因为一些APP产生的垃圾及部分软件之间的不兼容 会造成Android手机越用越慢 使用Android系统的华为mate10也不例外 如果你的mate10使用一段时间后 速度明显变慢了 不放将手机内的资料备份
  • Apache Eagle:实时安全监控方案

    原创 2016 03 27 朱洁 hadoop技术学习 Eagle是eBay开源的一个分布式实时安全监控方案 通过离线训练模型集合实时流引擎监控 能立即监测出对敏感数据的访问或恶意的操作 并立即采取应对的措施 下图是Eagle的架构 Eag
  • STM32单片机基础10——使用ADC读取气体传感器数据(MQ-2)

    本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的ADC外设 读取MQ 2气体传感器的数据并通过串口发送 1 准备工作 硬件准备 开发板 首先需要准备一个开发板 这里我准备的是STM32L4的开发板 BearPi
  • 【计算机组成原理】笔记(B站王道考研)

    课程 B站 王道考研 截图来自课程 计算机硬件 p4 计算机硬件的基本组成 冯诺依曼结构 理解冯诺依曼计算机 在计算机系统中 软件和硬件在逻辑上等价 冯诺依曼计算机特点 计算机由运算器 控制器 存储器 输入设备 输出设备五大部件组成 指令和
  • 在react组件中获取DOM元素的三种方式

    在react组件中获取DOM元素的三种方式 1 给标签设置ref属性 通过this refs调用 老版本语法 将要废除 h1 h1 this refs myH1 2 在构造器中创建ref全局变量 在标签中ref属性动态绑定这个全局变量 通过
  • 织梦编辑器乱码问题解决方法,织梦的安全过滤器限制。

    文章一开始发布时编辑器看是正常的 等发布后文章要二次编辑后就出问题了 文章里的样式 如 p aaaaaaaa p 这样的等二次编辑室 会出现下面的问题 style 的st不见了 而且引号 和尖括号
  • VMware 共享文件夹失败问题 (***)

    VMware Ubuntu共享文件夹 mnt hgfs下为空 https blog csdn net LXdragon1991 article details 131792777 Linux挂载共享文件夹 VMware挂载共享文件夹 挂载h
  • jquery上下切换滑动

  • Keil "st-link usb communication error"解决方法

    Keil st link usb communication error 解决方法 今天碰到了 st link usb communication error 的问题 在网上找了好多的资料 测试了好多的方法 最终才解决问题 在此贴出来 希望
  • 在WebStorm中设置Node.js的语法提示

    在 WebStorm 中写 es6 node 的时候 会出现没有语法提示或者是产生波浪线的现象 例如常用的 require import 在 vue html 等文件上也有被黄色背景色标上 未知标签名 的语法提示的现象 如何设置 设置 ES
  • ENS源代码

    Submitted for verification at Etherscan io on 2020 01 30 File ensdomains ens contracts ENS sol pragma solidity gt 0 4 24
  • centos虚拟机重启网卡命令

    在 CentOS 虚拟机中重启网卡的命令是 systemctl restart network 注意 这条命令需要使用 root 权限执行 如果您使用的是普通用户 需要使用 sudo 命令提升权限 例如 sudo systemctl res
  • Python实现将一张图片裁剪多张

    文章目录 一 需求 二 代码 一 需求 需要将一张图片 从中间对半裁剪为两张图片 如 裁剪为两张 二 代码 import os from PIL import Image IMAGES PATH img test 图片集地址 支持的格式 I
  • sql:无法解决 equal to 操作中 "Chinese_PRC_CI_AS" 和 "Chinese_Taiwan_Stroke_CI_AS" 之间的排序规则冲突。...

    无法解决 equal to 操作中 Chinese PRC CI AS 和 Chinese Taiwan Stroke CI AS 之间的排序规则冲突 CREATE VIEW View VipBranchStaffBranchList AS
  • 【开发心得】electron iohook集成使用方案

    前言 最近在研究门锁刷卡 用electron写了个客户端 需要读取全局的键盘输入 百度搜到的帖子都不是很完全 或者只言片语 这里稍微完整的写一下 集成示例gitee electron iohook demo electron集成iohook
  • 4、vue 中报错 Error in mounted hook: "TypeError: handlers[i].call is not a function"

    Vue中提示警告 1 2 3 4 5 6 7 Vue warn Error in mounted hook TypeError handlers i call is not a function found in gt
  • ubuntu18下grpc编译与安装

    grpc装起来很麻烦 会有很多坑 按照官方文档或者其他博客的步骤 不注意依赖库的版本页会导致各种问题 0 环境 在 https grpc io docs grpc的环境依赖如下 Language OS Compilers SDK C C L