正题
我用的Centos 7 系统,选择的 grpc 1.29.1 版本
前期准备
git、cmake、make、gcc等,一定要安装
下载源码 (github下载大概一个小时吧)
(2022.8.5 https://hub.xn--gzu630h.xn--kpry57d 镜像仓库可能挂了,看看其他的仓库吧,GitClone - Use cache to speed up clone from github and Provide services for developers)(或者kgithub.com )
git clone -b v1.29.1 https://hub.xn--gzu630h.xn--kpry57d/grpc/grpc.git
修改 .submodule 文件 (github下载很容易断线)
cd grpc
vim .gitmodules
修改 (主要是修改源路径的下载地址,改成其他镜像源)
[submodule "third_party/zlib"]
path = third_party/zlib
url = https://hub.xn--gzu630h.xn--kpry57d/madler/zlib
# 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://hub.xn--gzu630h.xn--kpry57d/google/protobuf.git
branch = 3.0.x
[submodule "third_party/gflags"]
path = third_party/gflags
url = https://hub.xn--gzu630h.xn--kpry57d/gflags/gflags.git
[submodule "third_party/googletest"]
path = third_party/googletest
url = https://hub.xn--gzu630h.xn--kpry57d/google/googletest.git
[submodule "third_party/benchmark"]
path = third_party/benchmark
url = https://hub.xn--gzu630h.xn--kpry57d/google/benchmark
[submodule "third_party/boringssl-with-bazel"]
path = third_party/boringssl-with-bazel
url = https://hub.xn--gzu630h.xn--kpry57d/google/boringssl.git
[submodule "third_party/cares/cares"]
path = third_party/cares/cares
url = https://hub.xn--gzu630h.xn--kpry57d/c-ares/c-ares.git
branch = cares-1_12_0
[submodule "third_party/bloaty"]
path = third_party/bloaty
url = https://hub.xn--gzu630h.xn--kpry57d/google/bloaty.git
[submodule "third_party/abseil-cpp"]
path = third_party/abseil-cpp
url = https://hub.xn--gzu630h.xn--kpry57d/abseil/abseil-cpp.git
branch = lts_2020_02_25
[submodule "third_party/envoy-api"]
path = third_party/envoy-api
url = https://hub.xn--gzu630h.xn--kpry57d/envoyproxy/data-plane-api.git
[submodule "third_party/googleapis"]
path = third_party/googleapis
url = https://hub.xn--gzu630h.xn--kpry57d/googleapis/googleapis.git
[submodule "third_party/protoc-gen-validate"]
path = third_party/protoc-gen-validate
url = https://hub.xn--gzu630h.xn--kpry57d/envoyproxy/protoc-gen-validate.git
[submodule "third_party/udpa"]
path = third_party/udpa
url = https://hub.xn--gzu630h.xn--kpry57d/cncf/udpa.git
[submodule "third_party/libuv"]
path = third_party/libuv
url = https://hub.xn--gzu630h.xn--kpry57d/libuv/libuv.git
ps,最新版的grpc好像还新增了一个模块叫做 re2
理论上也加个 https://hub.xn--gzu630h.xn--kpry57d 前缀就能下载了
下载子模块 (半个小时吧,换源已经很快了)
git submodule update --init
编译安装
官方编译指引
grpc/BUILDING.md at master · grpc/grpc · GitHub
# 创建cmake构建目录, 一般cmake都不在当前目录下, cmake 好像不能清理, 只有cmake3 好像支持 cmake3 clean
mkdir -p cmake/build
cd cmake/build
# 执行cmake命令, BUILD_SHARED_LIBS 表示需要生成so库, CMAKE_INSTALL_PREFIX 指定安装路径
cmake ../.. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=/home/abc/
# 加上-j指定同时编译的cpu核数, 加快速度, 4核就 -j4 就行
make -j8
make install
我指定安装的路径是 /home/abc/
注意
grpc团队,应该就是谷歌团队,自己fork了一个openssl分支,叫做boringssl,(谷歌团队好像要往openssl 1.1.0 靠拢),这是下载的一个子模块,比openssl多了一些自己的函数,编译了一个so库也叫 libssl.so,在前面的安装路径能看到它