linux编译grpc

22 篇文章 0 订阅
2 篇文章 0 订阅

linux编译grpc

安装cmake

编译cmake 版本需3.13及以上版本

使用在线安装sudo apt install cmake

参看cmake 版本 cmake -version

下载地址:https://cmake.org/download/

可以直接下载二进制程序,或者下载源码编译安装。

程序或者源码地址:https://cmake.org/download/#older

如果是源码安装,那就是走解压缩、配置、编译、安装的4步。

后续就是建立软连接

sudo ln -s /home/shl/tools/cmake-3.30.1-Linux-x86_64/bin/cmake  /usr/bin/cmake

最后就是cmake --version 查看是否安装或者升级成功

安装的其他必备组件

apt-get install build-essential autoconf libtool pkg-config

#如果你是grpc开发者还需安装以下组件

apt-get install libgflags-dev 

apt-get install libgtest-dev

apt-get install clang libc++-dev

备注,(在这台电脑上,下面4个库都已经安装好了的)

##build-essential作用是提供编译程序必须软件包的列表信息,这样编译程序才知道头文件和库函数在哪,才会下载依赖的软件包

##autoconf是一种生成shell脚本的工具,可以自动配置软件源代码包

##libtool是自动生成并调用动态库的工具,包装了gcc或者其他编译器

##pkg-config提供功能:检查库的版本号;获得编译预处理参数,如宏定义、头文件的位置; 获得链接参数,如库及依赖的其他库的位置,文件名及其他一些链接参数;自动加入所依赖的其他库的设置。

环境变量配置

# 构建路径

export MY_INSTALL_DIR=/usr/local/grpc/   //具体哪个目录自定义

# 确保目录已存在

mkdir -p $MY_INSTALL_DIR

# 将本地bin目录增加到path环境变量中

export PATH=$PATH:$MY_INSTALL_DIR/bin

下载GRPC源码

下载地址:GitHub - grpc/grpc: The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)

编译安装
  1. 把终端命令切换到grpc源码处  cd  grpc源码

mkdir -p cmake/build

cd cmake/build

  1. 默认是生成静态库.a文件。如果想要编译动态库.so文件,运行cmake时添加-DBUILD_SHARED_LIBS=ON. 同时设置(静态库)动态库的输出路径(-DCMAKE_INSTALL_PREFIX=$MY_INSTALL_DIR)

cmake  ../..  -DBUILD_SHARED_LIBS=ON \

 -DgRPC_INSTALL=ON \

              -DgRPC_BUILD_TESTS=OFF \

              -DCMAKE_INSTALL_PREFIX=$MY_INSTALL_DIR \

设置第三方库的安装(两种方式,1.分别安装。2.自动安装),这里使用自动安装

如果想编译release版本,设置-DCMAKE_BUILD_TYPE=Release  

cmake ../..  -DCMAKE_BUILD_TYPE=Release       \

                -DgRPC_ABSL_PROVIDER=module     \

                -DgRPC_CARES_PROVIDER=module    \

               -DgRPC_PROTOBUF_PROVIDER=module \

               -DgRPC_RE2_PROVIDER=module      \

               -DgRPC_SSL_PROVIDER=module      \

               -DgRPC_ZLIB_PROVIDER=module

这样完成的cmake命令如下:

cmake  ../..  -DBUILD_SHARED_LIBS=ON \

-DgRPC_INSTALL=ON \

            -DgRPC_BUILD_TESTS=OFF \

            -DCMAKE_INSTALL_PREFIX=$MY_INSTALL_DIR \

-DCMAKE_BUILD_TYPE=Release       \

           -DgRPC_ABSL_PROVIDER=module     \

           -DgRPC_CARES_PROVIDER=module    \

           -DgRPC_PROTOBUF_PROVIDER=module \

           -DgRPC_RE2_PROVIDER=module      \

           -DgRPC_SSL_PROVIDER=module      \

           -DgRPC_ZLIB_PROVIDER=module

注解:

这里MY_INSTALL_DIR是环境变量设置的。

DCMAKE_BUILD_TYPE=Release 表示编译出release版本库

如果想编译出debug版本,则DCMAKE_BUILD_TYPE=Debug

DBUILD_SHARED_LIBS=ON  表示编译出动态库,

如果想编译出静态库,则直接去掉DBUILD_SHARED_LIBS=ON

DgRPC_SSL_PROVIDER=module  表示直接使用grpc的third_party的源码编译。

  1. make  -j   

 //多核编译 如make  -j4

  1. make install

备注:

mkdir -p  选项确保了指定的整个目录路径都会被创建。

cmake   生成构建文件(如makefile)

处理proto文件

可以直接使用windows版本的proto文件及生成的pb、grpc.pb文件。当然也可以在linux自己使用命令生成pb、grpc.pb文件。

.pb.h:声明生成的消息类的头文件

.pb.cc:包含消息类的实现

.grpc.pb.h:声明生成的服务类的头文件

.grpc.pb.cc:包含服务类的实现

先配置环境变量

一样要使用到protoc软件,则需要在环境变量PATH增加protoc软件所在的目录,同时由于protoc软件需要用到grpc的动态库,所以需要设置环境变量LD_LIBRARY_PATH,增加grpc动态库目录。如下:

export PATH=/root/study/grpc/grpc/bin:$PATH

export LD_LIBRARY_PATH=/root/study/grpc/grpc/lib/debug:$LD_LIBRARY_PATH

终端输入命令

protoc   --cpp_out=./  ./helloworld.proto

protoc  --grpc_out=./ --plugin=protoc-gen-grpc=/root/study/grpc/grpc/bin/grpc_cpp_plugin helloworld.proto

注解:

protoc:解析proto文件并根据给定的选项生成输出,其命令格式是protoc [OPTION] PROTO_FILES,最后一项是待编译的proto文件的位置

–cpp_out:指定.pb.cc和.pb.h文件的输出目录

--grpc_out:指定.grpc.pb.cc和.grpc.pb.h文件的输出目录

--plugin:指定要使用的插件可执行文件。可执行文件的形式是名称=路径,在这种情况下给定的插件名称映射到给定的可执行文件。

grpc_cpp_plugin是grpc的protoc插件

配置依赖库

前提:把编译好的grpc放在/usr/local目录下

可以使用pkg-config --libs protobuf grpc++ 查看依赖包关系,这里得到

root@glh-kylin:/usr/local# pkg-config --libs protobuf grpc++

-L/usr/local/grpc/lib -lprotobuf -lpthread -lgrpc++ -lgrpc -laddress_sorting -lre2 -lupb -lcares -lz -lgpr -lssl -lcrypto -labsl_raw_hash_set -labsl_hashtablez_sampler -labsl_exponential_biased -labsl_hash -labsl_city -labsl_wyhash -labsl_statusor -labsl_status -labsl_cord -labsl_bad_optional_access -labsl_str_format_internal -labsl_synchronization -labsl_graphcycles_internal -labsl_stacktrace -labsl_symbolize -labsl_debugging_internal -labsl_demangle_internal -labsl_malloc_internal -labsl_time -labsl_civil_time -labsl_strings -labsl_strings_internal -lrt -labsl_base -labsl_spinlock_wait -labsl_int128 -labsl_throw_delegate -labsl_time_zone -labsl_bad_variant_access -labsl_raw_logging_internal -labsl_log_severity

依赖库介绍

项目时需要链接的依赖库:

grpc++:gRPC的C++库。

grpc_unsecure:不安全的传输层实现。

gpr:gRPC的基础运行时库。

address_sorting:一个用于IPV6的辅助库。

cares:c-ares异步解析库。

absl_synchronization:来自Abseil的同步库。

absl_time:来自Abseil的时间库。

absl_strings:来自Abseil的字符串库。

upb:Protocol Buffers的微型边界(micro border)运行时库。

protobuf:Protocol Buffers库。

你可能还需要z库,如果你的gRPC使用了zlib。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值