特别需要强调,grpc 需要 6.3 以上的 gcc/g++版本,如果低于此版本的需要参考文档进行升级。
cmake 、gcc 的版本, ubuntu16.04 默认的版本不支持。
1 安装必要的依赖工具
安装必要的依赖工具
sudo apt-get install autoconf automake libtool
复制代码
如果 cmake 低于 3.15, gcc/g++ 低于 7.0 ,请根据文档进行安装。查看版本的方式
# 检查cmake版本cmake -version# 检查gcc/g++版本gcc -vg++ -v
复制代码
1.1 安装 cmake
可以下载更新的版本:
最低版本为 3.15。
1. 卸载已经安装的旧版的 CMake
sudo apt-get autoremove cmake
复制代码
2. 文件下载解压
wget https://cmake.org/files/v3.23/cmake-3.23.0-linux-x86_64.tar.gz
复制代码
解压:
tar zxf cmake-3.23.0-linux-x86_64.tar.gz
复制代码
查看解压后目录:
tree -L 2 cmake-3.23.0-linux-x86_64
cmake-3.23.0-linux-x86_64
├── bin
│ ├── ccmake
│ ├── cmake
│ ├── cmake-gui
│ ├── cpack
│ └── ctest
├── doc
│ └── cmake
├── man
│ ├── man1
│ └── man7
└── share
├── aclocal
├── applications
├── bash-completion
├── cmake-3.23
├── emacs
├── icons
├── mime
└── vim
复制代码
bin 下面有各种 cmake 家族的产品程序.
3. 创建软链接
注: 文件路径是可以指定的, 一般选择在/opt
或 /usr
路径下, 这里选择/opt
sudo mv cmake-3.23.0-linux-x86_64 /opt/cmake-3.23.0
sudo ln -sf /opt/cmake-3.23.0/bin/* /usr/bin/
复制代码
4. 测试版本
ubuntu@VM-16-11-ubuntu:~/rpc$ cmake -version
cmake version 3.23.0
CMake suite maintained and supported by Kitware (kitware.com/cmake).
复制代码
1.2 安装 gcc/gdb
升级 gcc 和 gdb 的版本,至少需要 6.3 以上的版本。
注意:如果已经是高于 7.0 不需要再次安装。
注意:如果已经是高于 7.0 不需要再次安装。
目标: 安装 gcc g++ 7 的安装包
安装
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install g++-7 -y
复制代码
建立软连接并检查
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 \
--slave /usr/bin/g++ g++ /usr/bin/g++-7
sudo update-alternatives --config gcc
gcc -v
g++ -v
复制代码
显示 7.5 的版本。
2 编译 grpc
推荐使用 cmake 的方式进行编译。 grpc 安装过程比较依赖网络的通畅性(容易被墙),我是租用了腾讯云香港服务器下载的 grpc 源代码,他不仅是 grpc 源码本身,还依赖了很多第三方库,比如 protobufer。大家可以直接使用我提供的源码包(900+MB,记得先解压)进行编译。
如果不能翻墙,直接采用我提供的压缩包 grpc-v1.45.2.tar.bz2,则解压
解压方式:
tar -jxf grpc-v1.45.2.tar.bz2
复制代码
解压完直接跳到步骤 4.编译和安装。如果能翻墙则可以从 步骤 1. 下载源码开始。
下载源码
git clone https://github.com/grpc/grpc
复制代码
查看版本并选择合适的版本,这里选择 v1.45.2 相对较新的版本
git tag
git checkout v1.45.2
复制代码
查看此时 grpc 目录内容的大小 du -h --max-depth=1, 可以看到 427M 左右
ubuntu@VM-16-11-ubuntu:~/rpc/grpc$ du -h --max-depth=1
348M ./.git
32K ./summerofcode
1.5M ./doc
6.5M ./tools
4.0K ./spm-core-include
24M ./test
80K ./cmake
3.0M ./third_party
4.0K ./spm-cpp-include
1.5M ./templates
8.0K ./.bazelci
1.9M ./include
5.0M ./examples
34M ./src
268K ./etc
64K ./.github
284K ./bazel
427M .
复制代码
下载第三方依赖库,下载完后会发现整个 grpc 目录内容明显变大
git submodule update --init
复制代码
再次查看 目录大小,占用了 1.3G。
ubuntu@VM-16-11-ubuntu:~/rpc/grpc$ du -h --max-depth=1
899M ./.git
32K ./summerofcode
1.5M ./doc
6.5M ./tools
4.0K ./spm-core-include
24M ./test
80K ./cmake
291M ./third_party
4.0K ./spm-cpp-include
1.5M ./templates
8.0K ./.bazelci
1.9M ./include
5.0M ./examples
34M ./src
268K ./etc
64K ./.github
284K ./bazel
1.3G
复制代码
编译和安装
mkdir -p cmake/build
cd cmake/build
cmake ../..
make
sudo make install
复制代码
3 protobuf 安装
不用手动安装 protobuf,不然版本可能和 grcp 不匹配,必须在 grpc 执行 git submodule update --init 命令之后生成的 third_party/protobuf 里面编译安装对应的 protobuf。
cd third_party/protobuf/
./autogen.sh
./configure --prefix=/usr/local
make
sudo make install
sudo ldconfig # 使得新安装的动态库能被加载
protoc --version
显示3.19.4
复制代码
4 测试环境
编译 helloworld
cd grpc/examples/cpp/helloworld/
mkdir build
cd build/
cmake ..
make登录后复制
复制代码
启动服务和客户端
# 启动服务端,监听在50051端口
./greeter_server
Server listening on 0.0.0.0:50051
# 启动客户端,服务端返回Hello world
./greeter_client
Greeter received: Hello world
复制代码
5 参考
ubuntu搭建grpc for C++开发环境wx5bb365de633ed的技术博客51CTO博客 该文档提供修改 grpc 第三方库下载地址的方式进行安装。
6 辅助-使用 scp 命令,远程上传下载文件/文件夹
这里只是提供一种方式供大家可以在服务器之间传递文件,不是该节课程的内容,仅供参考。
从服务器下载文件
scp username@servername:/path/filename /local/path
复制代码
例如: scp ubuntu@192.168.1.222:/ubuntu/data/data.txt /desktop/ubuntu 把 192.168.1.222 上的/ubuntu/data/data.txt 的文件下载到/desktop/ubuntu 目录中
上传本地文件到服务器
scp /local/path/local_filename username@servername:/path
复制代码
例如: scp /ubuntu/learning/deeplearning.doc ubuntu@192.168.1.222:/ubuntu/learning 把本机/ubuntu/learning/目录下的 deeplearning.doc 文件上传到 192.168.1.222 这台服务器上的/ubuntu/learning 目录中
从服务器下载整个目录
scp -r username@servername:/path /path
复制代码
例如: scp -r ubuntu@192.168.1.222:/home/ubuntu/data /local/local_dir “-r”命令是文件夹目录,把当前/home/ubuntu/data 目录下所有文件下载到本地/local/local_dir 目录中
上传目录到服务器
scp -r /path username@servername:/path
复制代码
例如: scp -r /ubuntu/test ubuntu@192.168.1.222:/ubuntu/tx “-r”命令是文件夹目录,把当前/ubuntu/test 目录下所有文件上传到服务器的/ubuntu/tx/目录中
C++ GRPC使用讲解
评论