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跑起来了