gRPC C++开发环境搭建

2023-11-20

特别需要强调,grpc需要6.3以上的gcc/g++版本,如果低于此版本的需要参考文档进行升级。

cmake 、gcc的版本, ubuntu16.04默认的版本不支持。

1 安装必要的依赖工具

安装必要的依赖工具

sudo apt-get install autoconf automake libtool

如果cmake低于3.15, gcc/g++ 低于 7.0 ,请根据文档进行安装。查看版本的方式

# 检查cmake版本
cmake -version
# 检查gcc/g++版本
gcc -v
g++ -v

1.1 安装 cmake

可以下载更新的版本:

最低版本为3.15。

1. 卸载已经安装的旧版的CMake
sudo apt-get autoremove cmake
2. 文件下载解压
wget https://cmake.org/files/v3.23/cmake-3.23.0-linux-x86_64.tar.gz

解压:

tar zxf cmake-3.23.0-linux-x86_64.tar.gz

查看解压后目录:

tree -L 2 cmake-3.23.0-linux-x86_64

cmake-3.23.0-linux-x86_64
├── bin
│   ├── ccmake
│   ├── cmake
│   ├── cmake-gui
│   ├── cpack
│   └── ctest
├── doc
│   └── cmake
├── man
│   ├── man1
│   └── man7
└── share
    ├── aclocal
    ├── applications
    ├── bash-completion
    ├── cmake-3.23
    ├── emacs
    ├── icons
    ├── mime
    └── vim

bin下面有各种cmake家族的产品程序.

3. 创建软链接

注: 文件路径是可以指定的, 一般选择在/opt 或 /usr 路径下, 这里选择/opt

sudo mv cmake-3.23.0-linux-x86_64 /opt/cmake-3.23.0
sudo ln -sf /opt/cmake-3.23.0/bin/*  /usr/bin/
4. 测试版本
ubuntu@VM-16-11-ubuntu:~/rpc$ cmake -version
cmake version 3.23.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).

1.2 安装gcc/gdb

升级gcc和gdb的版本,至少需要6.3以上的版本。

Operating System Architectures Versions Support
Linux - Debian, Ubuntu, CentOS x86, x64 clang 6+, GCC 6.3+ Officially Supported
Windows 10+ x86, x64 Visual Studio 2017+ Officially Supported
MacOS x86, x64 XCode 12+ Officially Supported
Linux - Others x86, x64 clang 6+, GCC 6.3+ Best Effort

注意:如果已经是高于7.0 不需要再次安装。

目标: 安装 gcc g++ 7的安装包

安装

sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install g++-7 -y

建立软连接并检查

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 \
                         --slave /usr/bin/g++ g++ /usr/bin/g++-7 
sudo update-alternatives --config gcc
gcc -v
g++ -v

显示7.5的版本。

2 编译grpc

推荐使用cmake的方式进行编译。 grpc安装过程比较依赖网络的通畅性(容易被墙),我是租用了腾讯云香港服务器下载的grpc源代码,他不仅是grpc源码本身,还依赖了很多第三方库,比如protobufer。大家可以直接使用我提供的源码包(900+MB,记得先解压)进行编译。

如果不能翻墙,直接采用我提供的压缩包 grpc-v1.45.2.tar.bz2,则解压

解压方式: 
tar -jxf grpc-v1.45.2.tar.bz2

解压完直接跳到步骤 4.编译和安装。如果能翻墙则可以从 步骤1. 下载源码开始。

下载源码

git clone  https://github.com/grpc/grpc

查看版本并选择合适的版本,这里选择v1.45.2相对较新的版本

git tag
git checkout v1.45.2

查看此时grpc目录内容的大小du -h --max-depth=1, 可以看到427M左右

ubuntu@VM-16-11-ubuntu:~/rpc/grpc$ du -h --max-depth=1
348M    ./.git
32K ./summerofcode
1.5M    ./doc
6.5M    ./tools
4.0K    ./spm-core-include
24M ./test
80K ./cmake
3.0M    ./third_party
4.0K    ./spm-cpp-include
1.5M    ./templates
8.0K    ./.bazelci
1.9M    ./include
5.0M    ./examples
34M ./src
268K    ./etc
64K ./.github
284K    ./bazel
427M    .

下载第三方依赖库,下载完后会发现整个grpc目录内容明显变大

git submodule update --init

再次查看 目录大小,占用了1.3G

ubuntu@VM-16-11-ubuntu:~/rpc/grpc$ du -h --max-depth=1
899M    ./.git
32K ./summerofcode
1.5M    ./doc
6.5M    ./tools
4.0K    ./spm-core-include
24M ./test
80K ./cmake
291M    ./third_party
4.0K    ./spm-cpp-include
1.5M    ./templates
8.0K    ./.bazelci
1.9M    ./include
5.0M    ./examples
34M ./src
268K    ./etc
64K ./.github
284K    ./bazel
1.3G    

编译和安装

mkdir -p cmake/build
cd cmake/build
cmake ../..
make
sudo make install

3 protobuf安装

不用手动安装protobuf,不然版本可能和grcp不匹配,必须在 grpc 执行 git submodule update --init 命令之后生成的 third_party/protobuf 里面编译安装对应的 protobuf。

cd third_party/protobuf/
./autogen.sh 
./configure --prefix=/usr/local
make

sudo make install
sudo ldconfig  # 使得新安装的动态库能被加载

protoc --version
显示3.19.4

4 测试环境

编译helloworld

cd grpc/examples/cpp/helloworld/
mkdir build
cd build/
cmake ..
make登录后复制

启动服务和客户端

# 启动服务端,监听在50051端口
./greeter_server
Server listening on 0.0.0.0:50051
# 启动客户端,服务端返回Hello world
./greeter_client 
Greeter received: Hello world

5 参考

ubuntu搭建grpc for C++开发环境wx5bb365de633ed的技术博客51CTO博客 该文档提供修改grpc第三方库下载地址的方式进行安装。

6 辅助-使用scp命令,远程上传下载文件/文件夹

这里只是提供一种方式供大家可以在服务器之间传递文件,不是该节课程的内容,仅供参考。

从服务器下载文件

scp username@servername:/path/filename /local/path

例如: scp ubuntu@192.168.1.222:/ubuntu/data/data.txt /desktop/ubuntu 把192.168.1.222上的/ubuntu/data/data.txt 的文件下载到/desktop/ubuntu目录中

上传本地文件到服务器

scp /local/path/local_filename username@servername:/path

例如: scp /ubuntu/learning/deeplearning.doc ubuntu@192.168.1.222:/ubuntu/learning 把本机/ubuntu/learning/目录下的deeplearning.doc文件上传到192.168.1.222这台服务器上的/ubuntu/learning目录中

从服务器下载整个目录

scp -r username@servername:/path /path

例如: scp -r ubuntu@192.168.1.222:/home/ubuntu/data /local/local_dir “-r”命令是文件夹目录,把当前/home/ubuntu/data目录下所有文件下载到本地/local/local_dir目录中

上传目录到服务器

scp  -r  /path  username@servername:/path

例如: scp -r /ubuntu/test ubuntu@192.168.1.222:/ubuntu/tx “-r”命令是文件夹目录,把当前/ubuntu/test目录下所有文件上传到服务器的/ubuntu/tx/目录中

GRPC源码包 有需要的可以自行加群获取973961276

C++ GRPC使用讲解

参考:

C/C++后台开发全网唯一的C++ GRPC使用讲解


视频地址: https://www.bilibili.com/video/BV1RY411K7vm/?vd_source=74d4d817c0efcc4fc5616e324b0d971c

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

gRPC C++开发环境搭建 的相关文章

随机推荐

  • PAT 7 加法变乘法

    加法变乘法 我们都知道 1 2 3 49 1225现在要求你把其中两个不相邻的加号变成乘号 使得结果为2015比如 1 2 3 1011 12 2728 29 49 2015就是符合要求的答案 请你寻找另外一个可能的答案 并把位置靠前的那个
  • Vue的响应式原理与diff算法的理解

    前端面试中主技术栈是vue的小伙伴应该都知道 这道题会被经常问到 也是老生常谈的一些题 下面简单说一下这些题 一 什么是vue的响应式原理 答 1 首次数据加载的时候 比如我data里面有age name 通过Object definePr
  • scarpy 爬虫

    基本指令 全局指令 scrapy fetch 直接爬取某个网页 scrapy runspider 运行某个爬虫 并且这个爬虫可以不属于项目里 scrapy settings 设置 scrapy shell 进入交互模式 D gt scrap
  • 缺陷报告—缺陷的状态

    缺陷状态 new 新的状态 open 激活 打开 的缺陷 开发方承认的缺陷 fixed 修改完成的缺陷 待返测的缺陷 close 关闭的缺陷 结束的缺陷 可归档的缺陷 rejected 被拒绝的缺陷 开发方没承认的缺陷 reopen 重新激
  • 【uniapp小程序】—— APP项目云打包(安卓)

    前言 之前小程序系列文章写了配置页面和封装自定义组件 这次写一下开发完成我们的项目后 如何进行打包安装 本文主要讲述的是使用 uniapp打包安卓 正文 第一步 查看自己的项目的基础配置 第二步 选择打包项目 选中我们要打包的项目 方式一
  • 可持久化线段树(主席树)【舰娘系列】【自编题】

    pixiv https www pixiv net member illust php mode medium illust id 60083619 向大 hei 佬 e 势力学 di 习 tou 前段时间做了一套大佬自己出的题 大佬竟然是
  • 利用Qt Assistant 修改帮助文档可能会出现的修改失败的问题

    关于利用Qt Assistant定制帮助文档 网络上已有相关教程 在使用该教程定制帮助文档时 初次创建没有问题 但是当我要修改文档结构时 会出现修改失败的情况 例如明明有些文件已经从qch中删除 但是生成qhc文件后使用assistant
  • BugkuCTF-WEB题文件上传

    启动场景 发现是文件上传 只能上传图像 不能上传PHP文件 那应该是寻找漏洞上传PHP文件 PHP文件里写入一句话木马 使用burp抓包 不断尝试发现发现需要修改的地方有三个 一个是http head里的Content Type multi
  • C语言中如何提取三位数的各个数字,怎样用C程序提取一个3位数的各个数位?

    如果简单点就int i 123 int k s k i 10 个位数s i 100 10 十位数i i 100 百位数 include void main int a int b c d 各个位数上的数字 printf 请输入一个三位数 s
  • C++ string获取文件路径文件名、文件路径、文件后缀(两种方式)

    windows路径有两种方式 一种正斜杠 一种反斜杠都可以表示路径 该方法可以支持这两种表达方法 方法一 采用substr 进行分割 string path1 D datas FusionTestData datas GF6 PMS E11
  • BigInteger详解

    java math BigInteger 表示任意大小的整数 当使用一个数超过了int型时就可以使用BigInteger 1 int型的范围 2 31 2 31 1 即 2147483648 2147483647 2 使用BigIntege
  • vector,list,deque区别

    http blog csdn net renkaihao article details 6803866 vector和built in数组类似 它拥有一段连续的内存空间 并且起始地址不变 因此它能非常好的支持随即存取 即 操作符 但由于它
  • python3如何使用matplotlib库_python3 的 matplotlib绘图库的使用

    1 绘制第一幅图表 1 figure函数 创建图表 2 subplot函数 创建子图 3 在多个图表中创建子图 4 plot 函数 画函数图像 5 sca 函数 选择子图 6 在 一张表中画多个曲线 2 直方图 3 散点图 4 饼图 5 图
  • 【Java基础知识 15】java反射机制原理详解

    Java学习路线 搬砖工逆袭Java架构师 简介 Java领域优质创作者 CSDN哪吒公众号作者 Java架构师奋斗者 扫描主页左侧二维码 加入群聊 一起学习 一起进步 欢迎点赞 收藏 留言 目录 一 类的加载与ClassLoader的理解
  • 干货分享

    对于数据分析师 建模工程师来说 将处理好的数据放在可视化的面板上进行呈现将更加有助于同事 领导来理解结果 今天小编就给大家来介绍一下如何用Python来制作一个数据可视化面板 使用的是Streamlit库 对于开发人员来说 只需几分钟就可以
  • Linux系统下如何修改主机名

    Linux系统安装好后 都会有默认的主机名 这里是用CentOS系统为例 默认的主机名是localhost localdomain 为了便于使用 我们常常需要修改主机名 下面演示是永久修改主机名的方法 第一步 更改 etc sysconfi
  • 利用docker搭漏洞环境并复现案例(crlf、目录穿越)

    准备 1 安装docker 2 导入漏洞环境文 3 配置漏洞文件 CRLF 原理 复现 目录穿越漏洞 准备 1 安装docker 1 更新系统软件包 sudo yum update 2 安装 Docker 的依赖软件包 sudo yum i
  • 腾讯云CVM云服务器实例族是什么?区别选择攻略

    腾讯云服务器CVM有多种实例族 如标准型S6 标准型S5 SA3实例 高IO型 内存 计算型及GPU型实例等 如何选择云服务器CVM实例规格呢 腾讯云服务器网建议根据实际使用场景选择云服务器CVM规格 例如Web网站应用可以选择标准型S5或
  • UML总结4---UML九种图关系说明

    UML中包括九种图 用例图 类图 对象图 状态图 时序图 协作图 活动图 组件图 配置图 用例图 Use Case Diagram 它是UML中最简单也是最复杂的一种图 说它简单是因为它采用了面向对象的思想 又是基于用户视角的 绘制非常容易
  • gRPC C++开发环境搭建

    特别需要强调 grpc需要6 3以上的gcc g 版本 如果低于此版本的需要参考文档进行升级 cmake gcc的版本 ubuntu16 04默认的版本不支持 1 安装必要的依赖工具 安装必要的依赖工具 sudo apt get insta