特别需要强调,grpc需要6.3以上的gcc/g++版本,如果低于此版本的需要参考文档进行升级。
- cmake 、gcc的版本, ubun默认的版本不支持。
1 安装必要的依赖工具
安装必要的依赖工具
sudo apt-get install autoconf automake libtool
如果cmake低于3.15, gcc/g++ 低于 7.0 ,请根据文档进行安装。查看版本的方式
br# 检查cmake版本brcmake -versionbr# 检查gcc/g++版本brgcc -vbrg++ -v
1.1 安装 cmake
可以下载更新的版本:
最低版本为3.15。
1. 卸载已经安装的旧版的CMake
brsudo apt-get autoremove cmake
2. 文件下载解压
brwget
解压:
brtar zxf cmake-3.23.0-linux-x86_64.
查看解压后的目录:
tree -L 2 cmake-3.23.0-linux-x86_64br brcmake-3.23.0-linux-x86_64br├── binbr│ ├── ccmakebr│ ├── cmakebr│ ├── cmake-guibr│ ├── cpackbr│ └── ctestbr├── docbr│ └── cmakebr├── manbr│ ├── man1br│ └── man7br└── sharebr ├── aclocalbr ├── applicationsbr ├── bash-completionbr ├── cmake-3.23br ├── emacsbr ├── iconsbr ├── mimebr └── vim
bin下面有各种cmake家族的产品程序.
3. 创建软链接
注: 文件路径是可以指定的, 一般选择在/opt 或 /usr 路径下, 这里选择/opt
brsudo mv cmake-3.23.0-linux-x86_64 /o ln -sf /o* /usr/bin/
4. 测试版本
brubuntu@VM-16-11-ubuntu:~/rpc$ cmake -versionbrcmake version 3.23.0br brCMake suite maintained and supported by Kitware ).
1.2 安装gcc/gdb
升级gcc和gdb的版本,至少需要6.3以上的版本。
Operating System | Architectures | Versions | Support Level |
Linux - Debian, Ubuntu, CentOS | x86, x64 | clang 6+, GCC 6.3+ | Officially Supported |
Windows 10+ | x86, x64 | Visual Studio 2017+ | Officially Supported |
MacOS | x86, x64 | XCode 12+ | Officially Supported |
Linux - Others | x86, x64 | clang 6+, GCC 6.3+ | Best Effort |
注意:如果已经是高于7.0 不需要再次安装。
目标: 安装 gcc g++ 7的安装包
- 安装
brsudo apt-get install -y software-properties-commonbrsudo add-apt-repository ppa:ubuntu-toolchain-r/testbrsudo apt updatebrsudo apt install g++-7 -y
- 建立软连接并检查
brsudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 \br --slave /usr/bin/g++ g++ /usr/bin/g++-7 brsudo update-alternatives --config gccbrgcc -vbrg++ -v
显示7.5的版本。
2 编译grpc
推荐使用cmake的方式进行编译。 grpc安装过程比较依赖网络的通畅性(容易被墙),我是租用了腾讯云香港服务器下载的grpc源代码,他不仅是grpc源码本身,还依赖了很多第三方库,比如protobufer。大家可以直接使用我提供的源码包(900+MB,记得先解压)进行编译。
如果不能翻墙,直接采用我提供的压缩包 gr,则解压
br解压方式: brtar -jxf gr
解压完直接跳到步骤 4.编译和安装。如果能翻墙则可以从 步骤1. 下载源码开始。
- 下载源码
brgit clone
- 查看版本并选择合适的版本,这里选择v1.45.2相对较新的版本
brgit tagbrgit checkout v1.45.2
查看此时grpc目录内容的大小du -h --max-depth=1, 可以看到427M左右
brubuntu@VM-16-11-ubuntu:~/rpc/grpc$ du -h --max-depth=1br348M ./.gitbr32K . . . ./spm-core-includebr24M ./testbr80K . . . . ./.bazelcibr1.9M . ./examplesbr34M ./srcbr268K ./etcbr64K ./.githubbr284K ./bazelbr427M .br
- 下载第三方依赖库,下载完后会发现整个grpc目录内容明显变大
brgit submodule update --init
再次查看 目录大小,占用了1.3G。
brubuntu@VM-16-11-ubuntu:~/rpc/grpc$ du -h --max-depth=1br899M ./.gitbr32K . . . ./spm-core-includebr24M ./testbr80K ./cmakebr291M . . . ./.bazelcibr1.9M . ./examplesbr34M ./srcbr268K ./etcbr64K ./.githubbr284K .
- 编译和安装
brmkdir -p cmake/buildbrcd cmake/buildbrcmake ../..brmakebrsudo make install
3 protobuf安装
不用手动安装protobuf,不然版本可能和grcp不匹配,必须在 grpc 执行 git submodule update --init 命令之后生成的 third_party/protobuf 里面编译安装对应的 protobuf。
brcd third_party/protobuf/br. br./configure --prefix=/usr/localbrmakebr brsudo make installbrsudo ldconfig # 使得新安装的动态库能被加载br brprotoc --versionbr显示3.19.4
4 测试环境
编译helloworld
brcd grpc/examples/cpp/helloworld/brmkdir buildbrcd build/brcmake ..brmake登录后复制
启动服务器和客户端
br# 启动服务端,监听在50051端口br./greeter_serverbrServer listening on 0.0.0.0:50051br# 启动客户端,服务端返回Hello worldbr./greeter_client brGreeter received: Hello world
5 参考
ubuntu搭建grpc for C++开发环境wx5bb365de633ed的技术博客51CTO博客 该文档提供修改grpc第三方库下载地址的方式进行安装。
6 辅助-使用scp命令,远程上传下载文件/文件夹
这里只是提供一种方式供大家可以在服务器之间传递文件,不是该节课程的内容,仅供参考。
- 从服务器下载文件
brscp username@servername:/path/filename /local/path
例如: scp ubuntu@192.168.1.222:/ubuntu/data /desktop/ubuntu 把192.168.1.222上的/ubuntu/data 的文件下载到/desktop/ubuntu目录中
- 上传本地文件到服务器
brscp /local/path/local_filename username@servername:/path
例如: scp /ubuntu/learning ubuntu@192.168.1.222:/ubuntu/learning 把本机/ubuntu/learning/目录下的dee文件上传到192.168.1.222这台服务器上的/ubuntu/learning目录中
- 从服务器下载整个目录
brscp -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目录中
- 上传目录到服务器
brscp -r /path username@servername:/path
例如: scp -r /ubuntu/test ubuntu@192.168.1.222:/ubuntu/tx “-r”命令是文件夹目录,把当前/ubuntu/test目录下所有文件上传到服务器的/ubuntu/tx/目录中