在Ubuntu20.04环境下安装GRPC

由于工作项目中涉及GRPC,因此需要安装GRPC和PROTOC以及编译proto文件。特此记录自己安装与编译的整个过程和注意点。

一、解决虚拟机使用上的小问题

这一部分对安装GRPC没有特别的影响,如果自己的虚拟机存在这些使用不便的问题并且想解决,可以看看,如果不需要的话跳过这一部分就好了。

1、实现全屏显示及与windows之间的文件拖放

命令如下:

更新package:
sudo apt update

安装open-vm-tools-desktop,主要实现主机与虚拟机之间的复制粘贴包括文件拖放:
sudo apt-get install open-vm-tools-desktop

重启:
sudo reboot
安装成功后即可全屏显示与拖放文件

2、解决使用vi/vim编辑文件时方向键、退格键使用异常的问题

命令如下:

ubuntu预装的是vim tiny版本,而需要的是vim full版本。执行下面的语句安装vim full版本:

删除组件包vim-common:
sudo apt-get remove vim-common

安装文本编辑器:
sudo apt-get install vim

在这里插入图片描述

二、安装GRPC

GRPC可以完成跨语言之间的通信,它是一种协议。我们可以通过在proto文件中定义数据结构和接口函数来实现数据传输。

1、使用cmake --version先查看camke版本

在我第一次安装GRPC时,根据官方教程安装了推荐版本的cmake,但后续不知道什么原因导致没有成功安装GRPC。通过实践,我发现也许需要3.22.3及更高版本的cmake,所以为了保险起见,还是安装3.22.3版本的cmake。

可进入https://github.com/Kitware/CMake/releases自行下载,我选择的是 cmake-3.22.3-linux-x86_64.sh
放入虚拟机后更名为cmake-linux.sh(右键更改文件名)

运行cmake-linux.sh文件,通过脚本在本地目录安装更新的cmake版本,--skip-license安装时不会要求用户进行许可协议确认,--prefix=$MY_INSTALL_DIR 配置安装的路径:
sudo sh cmake-linux.sh -- --skip-license --prefix=$MY_INSTALL_DIR

查看cmake是否安装成功:cmake --version

2、安装构建grpc所需的基本工具

安装build-essential、autoconf 、libtool 、pkg-config:
##build-essential作用是提供编译程序必须软件包的列表信息,这样编译程序才知道头文件和库函数在哪,才会下载依赖的软件包
##autoconf是一种生成shell脚本的工具,可以自动配置软件源代码包
##libtool是自动生成并调用动态库的工具,包装了gcc或者其他编译器
##pkg-config提供功能:检查库的版本号;获得编译预处理参数,如宏定义、头文件的位置; 获得链接参数,如库及依赖的其他库的位置,文件名及其他一些链接参数;自动加入所依赖的其他库的设置。

命令如下:

更新package:
sudo apt update

安装所需库:
sudo apt-get install build-essential autoconf libtool pkg-config

3、克隆grpc存储库

命令如下:

安装git:
sudo apt install git
克隆存储库:
git clone -b v1.28.x https://gitee.com/slrom/grpc

4、下载grpc子模块的代码

这里需要注意的是,由于github访问不稳定,所以我们可以修改 grpc目录下的.gitmodules文件中各子模块的地址,便于更好下载子模块的代码

.gitmodules文件这样修改:

[submodule "third_party/zlib"]
	path = third_party/zlib
	url = https://gitee.com/slrom/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/slrom/protobuf.git
	branch = 3.0.x
[submodule "third_party/gflags"]
	path = third_party/gflags
	url = https://gitee.com/slrom/gflags.git
[submodule "third_party/googletest"]
	path = third_party/googletest
	url = https://gitee.com/slrom/googletest.git
[submodule "third_party/benchmark"]
	path = third_party/benchmark
	url = https://gitee.com/slrom/benchmark.git
[submodule "third_party/boringssl-with-bazel"]
	path = third_party/boringssl-with-bazel
	url = https://gitee.com/slrom/boringssl.git
[submodule "third_party/boringssl"]
	path = third_party/boringssl
	url = https://gitee.com/slrom/boringssl.git
[submodule "third_party/cares/cares"]
	path = third_party/cares/cares
	url = https://gitee.com/slrom/c-ares.git
	branch = cares-1_12_0
[submodule "third_party/bloaty"]
	path = third_party/bloaty
	url = https://gitee.com/slrom/bloaty.git
[submodule "third_party/abseil-cpp"]
	path = third_party/abseil-cpp
	url = https://gitee.com/slrom/abseil-cpp.git
	branch = lts_2020_02_25
[submodule "third_party/envoy-api"]
	path = third_party/envoy-api
	url = https://gitee.com/slrom/data-plane-api.git
[submodule "third_party/googleapis"]
	path = third_party/googleapis
	url = https://gitee.com/slrom/googleapis.git
[submodule "third_party/protoc-gen-validate"]
	path = third_party/protoc-gen-validate
	url = https://gitee.com/slrom/protoc-gen-validate.git
[submodule "third_party/udpa"]
	path = third_party/udpa
	url = https://gitee.com/slrom/udpa.git
[submodule "third_party/libuv"]
	path = third_party/libuv
	url = https://gitee.com/slrom/libuv.git
[submodule "third_party/libcxx"]
    path = third_party/libcxx
	url = https://gitee.com/slrom/libcxx.git
[submodule "third_party/libcxxabi"]
    path = third_party/libcxxabi
	url = https://gitee.com/slrom/libcxxabi.git

完成文件修改后,命令如下:

下载子模块的代码
到达grpc目录下:
cd grpc
根据.gitmodules文件中的路径访问相应子模块并下载:
git submodule update --init

5、构建和安装grpc和protocol buffers

命令如下:

到达grpc目录下:
cd grpc

若该文件夹不存在则创建文件夹:
mkdir -p cmake/build

到达cmake/build目录下:
cd cmake/build

编译构建依赖库,通过cmake安装grpc,设置-DgRPC_INSTALL=ON,-DgRPC_BUILD_TESTS=OFF;构建安装路径,通过CMAKE_INSTALL_PREFIX变量指定;想要编译动态库.so文件,设置-DBUILD_SHARED_LIBS=ON:
cmake -DgRPC_INSTALL=ON \
      -DgRPC_BUILD_TESTS=OFF \
      -DCMAKE_INSTALL_PREFIX=/usr/ \
      -DBUILD_SHARED_LIBS=ON \
      ../..
编译:
make -j16

安装:
sudo make install

三、测试

按照以上步骤,安装就基本完成了,但还是添加一步简单的测试验证下是否安装成功,如需要使用不是GRPC中自带的例子完成测试的话,可以去看看GRPC的官方教程。
命令如下:

cd grpc/examples/cpp/helloworld
mkdir -p cmake/build
cd cmake/build
cmake ../..
make -j16

ls
./greeter_server

新开终端
cd grpc/examples/cpp/helloworld/cmake/build
ls
./greeter_client


如果到这一步没有出现问题的话,就说明安装成功了。

四、protoc编译proto文件

protobuf有自己的编译器 protoc,可以将 .proto 编译成.cc文件,使之成为一个可以在 C++ 工程中直接使用的类。

1、linux环境

使用protoc命令,由proto文件生成.pb.{h,cc}和.grpc.pb.{h,cc}。
.pb.h:声明生成的消息类的头文件
.pb.cc:包含消息类的实现
.grpc.pb.h:声明生成的服务类的头文件
.grpc.pb.cc:包含服务类的实现

在grpc/examples/cpp目录下新建文件夹,例如service_error,将service_Error.proto放入该新建文件夹中,在该文件夹目录下输入命令:

protoc --proto_path=. --cpp_out=. ./service_Error.proto

protoc:解析proto文件并根据给定的选项生成输出,其命令格式是protoc [OPTION] PROTO_FILES,最后一项是待编译的proto文件的位置
–proto_path:指定要在其中搜索导入(import)的目录,可指定多次,目录将按顺序搜索,若没有指定,则使用当前工作目录。如果proto文件里面import相应文件,会去指定目录搜索相应的文件。(本次该选项可以不指定)
–cpp_out:指定.pb.cc和.pb.h文件的输出目录

查看grpc_cpp_plugin的所在路径,grpc_cpp_plugin是grpc的protoc插件。whereis命令用于查找文件。

whereis grpc_cpp_plugin

输入命令:
protoc --proto_path=./ --grpc_out=./ --plugin=protoc-gen-grpc=/usr/bin/grpc_cpp_plugin service_Error.proto

#--grpc_out:指定.grpc.pb.cc和.grpc.pb.h文件的输出目录
#--plugin:指定要使用的插件可执行文件。可执行文件的形式是名称=路径,在这种情况下给定的插件名称映射到给定的可执行文件。

2、windows环境

新建文件夹放入proto文件,例如service_Error.proto文件。在该文件夹下新建文档,修改后缀为bat。在该文件夹中新建文件夹,名称为gen-cpp,用于存放grpc输出文件。
可以通过以下方式显示后缀便于修改:

查找protoc.exe文件的路径
查找grpc_cpp_plugin.exe文件路径
选中bat文件,右键“编辑”,输入命令,例如proto.exe路径为:
E:\workspace\ui\thirdparty\bin\protoc.exe
则输入命令(注意修改为自己相应文件所在路径):

E:\workspace\ui\thirdparty\bin\protoc.exe  -I=./ --cpp_out=./gen-cpp ./service_Error.proto

E:\workspace\ui\thirdparty\bin\protoc.exe -I=./ --grpc_out=./gen-cpp --plugin=protoc-gen-grpc="E:\workspace\ui\thirdparty\bin\grpc_cpp_plugin.exe" ./service_Error.proto

pause

第一条命令中-I和-cpp_out选项与linux中protoc命令的选项–proto_path和-cpp_out作用相同。
第二条命令中–grpc_out和–plugin选项与linux中–grpc_out和–plugin选项作用相同。
pause 暂停CMD窗口操作

保存后,选中bat文件,右键“以管理员身份运行”,打开gen-cpp文件夹,已生成.pb.{h,cc}和.grpc.pb.{h,cc}文件


以上就是安装GRPC和PROTOC以及编译proto文件的整个过程。

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ellie是个昵称

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值