首页 > 编程语言 >Grpc C++使用总结

Grpc C++使用总结

时间:2023-07-14 22:13:40浏览次数:47  
标签:总结 set CMAKE PROTO Grpc C++ SRCS GRPC DIR

Grpc

一,安装

  1. 安装依赖

    sudo apt-get install pkg-config
    sudo apt-get install autoconf automake libtool make g++ unzip
    sudo apt-get install libgfalgs-dev libgtest-dev
    sudo apt-get install clang libc++-dev
    
  2. 下载gRPC

    git clone https://github.com/grpc/grpc.git
    cd grpc
    git checkout v1.47.1 // 切换到需要的分支
    git submodule update --init // 更新第三方源码
    
  3. 安装protobuf源码

    cd third_party/protobuf/
    git submodule update --init --recursive
    ./autogen.sh // 生成配置脚本
    ./configure  --prefix=/usr/local
    make -j8
    make check
    sudo make install
    sudo ldconfig    // 更新共享库缓存
    which protoc    // 查看软件是否安装成功
    protoc --version // 检查是否安装成功
    

    直接编译安装压缩包(v1.47.1): 链接: https://pan.baidu.com/s/11SRL9c19dd5alwWwSdUn0Q?pwd=gk7y 提取码: gk7y

  4. 安装gRPC

    cd ../..
    mkdir build && cd build
    cmake ..
    make -j8
    sudo make install
    
  5. 测试

    运行grpc/example中的示例代码

    cd example/cpp/helloworld
    make -j4
    ./greeter_server # 开启服务
    # 新起一个终端
    ./greeter_client # 打印出调用的结果:Hello world
    

使用

1. Proto文件定义

2. CMakeLists写法

cmake_minimum_required(VERSION 3.10.0)
project(master_control)


set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_definitions(-DBOOST_BIND_GLOBAL_PLACEHOLDERS)

#查找本地Protobuf模块的库信息
find_package(Protobuf REQUIRED)
set(_PROTOBUF_LIBPROTOBUF protobuf::libprotobuf)
message(STATUS "Using protobuf ${Protobuf_VERSION}")

#查找本地gRPC模块的库信息
find_package(gRPC CONFIG REQUIRED)
message(STATUS "Using gRPC ${gRPC_VERSION}")

set(GRPCPP_INCLUDE_DIRS $<TARGET_PROPERTY:gRPC::grpc++,INTERFACE_INCLUDE_DIRECTORIES>)
set(GRPCPP_LIBRARIES $<TARGET_PROPERTY:gRPC::grpc++_unsecure,INTERFACE_LINK_LIBRARIES>)
set(GRPCPP_PLUGIN_EXEC $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
set(_GRPC_GRPCPP gRPC::grpc++)
set(_REFLECTION gRPC::grpc++_reflection)

# 将proto文件列出
file(GLOB_RECURSE PROTO_LISTS ${CMAKE_CURRENT_SOURCE_DIR}/proto/*.proto)
set(PROTO_ALL_SRCS)
set(PROTO_ALL_HDRS)
set(GRPC_ALL_SRCS)
set(GRPC_ALL_HDRS)

foreach (PROTO_TMP_FILE ${PROTO_LISTS})
    get_filename_component(PROTO_FILE "${PROTO_TMP_FILE}" ABSOLUTE)
    get_filename_component(PROTO_PATH "${PROTO_FILE}" PATH)
    get_filename_component(PROTO_NAME "${PROTO_FILE}" NAME_WE)

    file(RELATIVE_PATH REL_FIL ${PROJECT_SOURCE_DIR} ${PROTO_TMP_FILE})

    #message(STATUS "-----------------------------")
    #message(STATUS "REL_FIL: ${REL_FIL}")
    get_filename_component(DIR ${REL_FIL} DIRECTORY)
    #message(STATUS "DIR: ${DIR}")

    # generated sources
    #代码生成器的目标文件位置
    set(PROTO_SRCS "${CMAKE_CURRENT_BINARY_DIR}/${DIR}/${PROTO_NAME}.pb.cc")
    set(PROTO_HDRS "${CMAKE_CURRENT_BINARY_DIR}/${DIR}/${PROTO_NAME}.pb.h")
    set(GRPC_SRCS "${CMAKE_CURRENT_BINARY_DIR}/${DIR}/${PROTO_NAME}.grpc.pb.cc")
    set(GRPC_HDRS "${CMAKE_CURRENT_BINARY_DIR}/${DIR}/${PROTO_NAME}.grpc.pb.h")

    list(APPEND PROTO_ALL_SRCS ${PROTO_SRCS})
    list(APPEND PROTO_ALL_HDRS ${PROTO_HDRS})
    list(APPEND GRPC_ALL_SRCS ${GRPC_SRCS})
    list(APPEND GRPC_ALL_HDRS ${GRPC_HDRS})

    #代码生成器脚本,根据proto文件生成C++的四个文件
    add_custom_command(
            OUTPUT "${PROTO_SRCS}" "${PROTO_HDRS}" "${GRPC_SRCS}" "${GRPC_HDRS}"
            COMMAND ${Protobuf_PROTOC_EXECUTABLE}
            ARGS --grpc_out "${CMAKE_CURRENT_BINARY_DIR}"
            --cpp_out "${CMAKE_CURRENT_BINARY_DIR}"
            -I "${CMAKE_CURRENT_SOURCE_DIR}"
            --plugin=protoc-gen-grpc="${GRPCPP_PLUGIN_EXEC}"
            "${PROTO_FILE}"
            DEPENDS "${PROTO_FILE}")
endforeach ()

# 将grpc编译成静态库
set(GRPC_LIBS "${PROJECT_NAME}_proto")
add_library(${GRPC_LIBS} STATIC
        ${PROTO_ALL_SRCS}
        ${PROTO_ALL_HDRS}
        ${GRPC_ALL_SRCS}
        ${GRPC_ALL_HDRS}
        )
target_link_libraries(${GRPC_LIBS}
        ${_REFLECTION}
        ${_GRPC_GRPCPP}
        ${_PROTOBUF_LIBPROTOBUF})
include_directories("${CMAKE_CURRENT_BINARY_DIR}")        
 

标签:总结,set,CMAKE,PROTO,Grpc,C++,SRCS,GRPC,DIR
From: https://www.cnblogs.com/Maybera/p/17555114.html

相关文章

  • c++ day 9
    今天来学习选择排序选择排序有多种方法下面是方法一:选择排序(SelectionSort)是一种简单但低效的排序算法。它的基本思想是在未排序的部分中选择最小(或最大)的元素,并将其放置在已排序部分的末尾。通过重复这个过程,直到所有元素都排好序为止。下面是选择排序的C++实现示例:#incl......
  • [已过万次测试] MIT 6.5840 2023 Lab 4 Shard KV Server TaskA, TaskB, Challenge 通
    MIT6.58402023Lab4ShardKVServerTaskA,TaskB,Challenge前言这波是终于写完了MIT6.5840的所有lab了。lab均是独立完成,没有任何参考,哈哈,还是挺有成就感的。lab4其实在上周就已经写完了,不过比较懒,拖了一周才开始写总结。本次lab4,在所有lab中,个人认为难度仅次于lab2,也......
  • 2023下助教工作总结
    一、助教工作的具体职责和任务(1)在本学期我担任阴爱英老师《数字电路与逻辑设计》的助教,主要协助老师的工作,对同学不理解的问题进行一定的指导以及答疑解答,收集大家作业不会写的题目,给老师反馈,收集并登记学生的作业完成情况。(2)跟学生沟通,了解同学们是否能跟得上老师的进度,同学们对......
  • 做题思考总结
    $做题总结$每次做之前看一看。做题千万不要分心,不要做一下这道题就去干别的事。OI思想:正反,抽象,等效,益少,独立对于OI思想的一些思考与理解独立:对于那些会改变的值,比如说数组之类的,显然他的下标的关联越少越好。比如f[k]和f[i-j]相比,肯定是前者更好,因为前者更为固定,通常可以通......
  • C/C++学生宿舍管理系统[2023-07-14]
    C/C++学生宿舍管理系统[2023-07-14]课程名称:程序设计实践专业班级:学生姓名:学号:任课教师:张闻强学期:2022-2023学年第2学期课程报告任务书题目 学生宿舍管理系统主要内容 用C语言开发一个简单的学生宿舍管理系统。实现宿舍......
  • 【ChernoC++笔记】智能指针
    【44】【ChernoC++】【中字】C++的智能指针智能指针(Smartpointers)是C++中的一种特殊类型,用于管理动态分配的内存资源。智能指针通过封装指针,并在适当的时机自动释放内存,从而避免内存泄漏和悬空指针等常见问题。unique_ptr❓为什么叫做uniqueptr?unique_ptr不能复制:如果复......
  • 每日总结2023年7月14日
    今日学习:完全图的概念,有向完全图和无向完全图。邻接矩阵的概念,邻接矩阵怎么画。邻接表怎么存储图的信息;图的遍历:深度优先、广度优先;拓扑排序:把有向边表示活动开始的先后关系。这种有向图称为用顶点表示活动网咯,成为AOE网络;图的最小生成树(普利姆算法Prime);明天的计划:把图和基础算法......
  • 【考后总结】7 月多校国赛模拟赛 3
    7.14冲刺国赛模拟36T1染色题关键性质是奇数偶数位上可以放置的只有两种,若\(i\)和\(i-2\)选的颜色不同,那么在\(i\)位置放一个球,\([l,r]\)的限制等价于\([l+2,r]\)中奇数位和偶数位不同时有球。设\(f_i\)为\(i\)放置一个球的合法方案数,这样直接枚举上一个球所在......
  • C++将WSAGetLastError转换成字符串信息
    #include<iostream>#include<Windows.h>#include<WinSock2.h>std::stringGetLastErrorMessage(){DWORDerrorCode=WSAGetLastError();LPSTRerrorMessage=nullptr;DWORDresult=FormatMessageA(FORMAT_MESSAGE_ALL......
  • Android Binder总结
    Binder总结首先感谢参考的博客AndroidBinder原理,下面是我个人的总结,方便加深理解1.0系统服务启动在servicemanager.rc中启动在servicemanager服务调用binder_open函数用于打开binder设备文件,并申请128k字节大小的内存空间调用binder_become_context_manager函数,将servi......