protobuf+grpc源码编译安装过程

发布时间:2023-09-21 11:30

下载Protobuf源码(c++)

获取源码:protobuf-cpp-3.11.4.tar.gz

如果需要其他语言的源码,请下载protobuf-all-[VERSION].tar.gz,其中的all也可替换为其他单独的一种语言,如protobuf-java-[VERSION].tar.gz

如果想要用git clone获取源码,还需要多一步获取子模块,请参考官方使用文档 README.md

编译安装Protobuf源码

接下来,编译并安装Protobuf:
为了有序,我把安装目录设定为/usr/local/protobuf

./configure --prefix=/usr/local/protobuf
make
make check
sudo make install
sudo ldconfig # refresh shared library cache.

这里就安装完成了,然后使用
protoc --version
查询版本号,如果有就说明安装成功。
如果不成功,请配置一下环境变量/etc/profile,参考jackytse_:linux下安装google protobuf(详细)

下载grpc源码

Github:grpc

make
make check
sudo make install

测试grpc

grpc中提供了一些例子供快速上手:

cd ./examples/cpp/helloworld
make
./greeter_server

切换到另一个终端:

./greeter_client

顺利的话会看到Hello World
参考:examples

报错解决

本人使用gcc9和grpc1.22.0,所以出现了一些问题,经过搜索后,发现在上游社区里有些pr更新正好解决了这些问题,记录如下:

  1. 报错:implicitly-declared operator= is deprecated
    原因:gcc 9导致
    解决方案来源:Github/grpc:#19647
    解决方案:在include/grpcpp/impl/codegen/call_op_set.h line 90添加
 /// Default assignment operator
  WriteOptions& operator=(const WriteOptions& other) = default;
  1. 报错:error: ambiguating new declaration of ‘long int gettid()’
    原因:gcc 9导致
    解决方案来源:Github/grpc:#20043
    解决方案:将src/core/lib/gpr/log_linux.ccsrc/core/lib/gpr/log_posix.ccsrc/core/lib/iomgr/ev_epollex_linux.cc这几个文件中的
    gettid()改为sys_gettid()
  2. 报错:no reference on protobuf blablabla(记不太清了,大概是这样,跟protobuf有关)
    原因:protobuf版本太旧
    解决方案来源:Github/protobuf项目里有人提了这个问题但没有解决,有人评论是用了最新的protobuf就好了,可能是里面某一个更新解决了这个问题。
    解决方案:安装新版本protobuf
  3. 自己造的一个大坑。。在安装完protobuf之后,想当然地以为它安装在了/usr/local目录下,实际上看编译配置文件会发现它默认安装在/usr下,导致我配环境变量的时候PKGCONFIG路径配错了。。。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号