在openEuler安装gRPC,并跑通第一个例子

1、从src-openeuler/grpc库中克隆

git clone git@gitee.com:src-openeuler/grpc.git

新装的系统需要 生成 并将密钥加入gitee

2、下载依赖库

3、下载rpm包管理器

4、使用rpm包管理器进行打包

这里有以下问题:

解决方法:

下载re2-devel包

再次进行rpmbuild -ba grpc.spec,安装成功开始,等待

又出现问题:报错后停止

正在执行(%clean):/bin/sh -e /var/tmp/rpm-tmp.FjxKwS
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd grpc-1.60.0
+ /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/grpc-1.60.0-3.x86_64
+ RPM_EC=0
++ jobs -p
+ exit 0
正在执行(rmbuild):/bin/sh -e /var/tmp/rpm-tmp.CZZ7Ja
+ umask 022
+ cd /root/rpmbuild/BUILD
+ rm -rf grpc-1.60.0 grpc-1.60.0.gemspec
+ RPM_EC=0
++ jobs -p
+ exit 0

RPM build warnings:
    行 54:Possible unexpanded macro 位于:Obsoletes: python-%{pypi_name} < 1.60.0-3

解决:

如果 %{pypi_name} 宏没有定义,需要在 .spec 文件中定义它,在文件的顶部加上定义

%define pypi_name grpcio

这时这个问题解决了,结果以及后续步骤如下:

5、使用dnf进行rpm包的安装

dnf install ~/rpmbuild/RPMS/x86_64/grpc-*.rpm

输出为:

6、这时通过rpm再查询就能看到了



7、好像是安装好了,跑一个例子试试

cmake时出错,完全找不到,不知道怎么回事

补充安装一个包(好像和这个关系不大)

解决方案,由于不是使用cmake方式安装的grpc,因此修改cmakelist,当查找grpc时,改为手动固定路径,有点麻烦,对cmake要有点了解

由原来例子的CmakeList改为我新写的CmakeList.txt

cmake_minimum_required(VERSION 3.8)
project(HelloWorld C CXX)

# 设置 gRPC 和 Abseil 的头文件和库文件路径
set(GRPC_INCLUDE_DIR "/usr/include/grpc")
set(GRPC_LIBRARY_DIR "/usr/lib64")
find_package(absl REQUIRED)

# 添加 gRPC 和 Abseil 包含目录
include_directories(${GRPC_INCLUDE_DIR})
include_directories(${ABSL_INCLUDE_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR})

# 使用 link_directories 命令添加 gRPC 库路径
link_directories(${GRPC_LIBRARY_DIR})

# 寻找 protobuf 包
find_package(Protobuf REQUIRED)

# 为 Protobuf 生成 C++ 代码
get_filename_component(hw_proto "../../protos/helloworld.proto" ABSOLUTE)
get_filename_component(hw_proto_path "${hw_proto}" PATH)

set(GRPC_CPP_PLUGIN_EXECUTABLE "/usr/bin/grpc_cpp_plugin")

set(hw_proto_srcs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.pb.cc")
set(hw_proto_hdrs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.pb.h")
set(hw_grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.grpc.pb.cc")
set(hw_grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/helloworld.grpc.pb.h")

add_custom_command(
    OUTPUT "${hw_proto_srcs}" "${hw_proto_hdrs}" "${hw_grpc_srcs}" "${hw_grpc_hdrs}"
    COMMAND protoc
    ARGS --grpc_out "${CMAKE_CURRENT_BINARY_DIR}"
         --cpp_out "${CMAKE_CURRENT_BINARY_DIR}"
         -I "${hw_proto_path}"
         --plugin=protoc-gen-grpc=${GRPC_CPP_PLUGIN_EXECUTABLE}
         "${hw_proto}"
    DEPENDS "${hw_proto}")

# 包含生成的头文件
include_directories("${CMAKE_CURRENT_BINARY_DIR}")

# 创建 hw_grpc_proto 库
add_library(hw_grpc_proto
  ${hw_grpc_srcs}
  ${hw_grpc_hdrs}
  ${hw_proto_srcs}
  ${hw_proto_hdrs})
  
# 为目标 hw_grpc_proto 链接 gRPC 和 Abseil 库
target_link_libraries(hw_grpc_proto
  ${GRPC_LIBRARY_DIR}/libgrpc++.so
  ${GRPC_LIBRARY_DIR}/libgrpc.so
  ${GRPC_LIBRARY_DIR}/libgpr.so
  ${GRPC_LIBRARY_DIR}/libgrpc_unsecure.so
  ${GRPC_LIBRARY_DIR}/libgrpc++_reflection.so
  #${ABSL_LIBRARY_DIR}/libabsl_synchronization.so
  #${ABSL_LIBRARY_DIR}/libabsl_str_format.so
  #${ABSL_LIBRARY_DIR}/libabsl_flags.so
  absl::synchronization
  absl::base
  absl::log
  absl::str_format
  absl::flags
  absl::flags_parse
  absl::log_internal_check_op
  ${PROTOBUF_LIBRARY}
)

# 为目标添加可执行文件
foreach(_target
    greeter_client greeter_server
    greeter_callback_client greeter_callback_server
    # 如果需要,添加其他 async 目标
)
  add_executable(${_target} "${_target}.cc")
  # 为目标链接 hw_grpc_proto 库和其他依赖库
  target_link_libraries(${_target} hw_grpc_proto)
endforeach()

解决结果:终于,经过了漫长的时间,成功将hellowWord跑起来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值