在linux系统使用protobuf教程

本文详细介绍了在Linux系统中使用protobuf时遇到的静态库和动态库的构建问题,包括编译protobuf时需添加-fPIC选项以解决静态库无法用于生成动态库的错误,以及如何处理多个动态库引用同一.proto文件时的冲突问题。通过实例分享了解决方案,旨在为后来者提供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有一个项目需要在linux系统下使用protobuf,由于在linux系统下的开发经验不足,所以踩了好多坑;因此记录下来,一来以后自己可以查看,二来希望对后来者有帮助。

一.使用静态库(默认生成方式)

也是自己太嫩了,上来就按照开源代码的惯用使用套路上来就是怼;

1.下载源代码:(e.g,官网、github)

2.mkdir cmake/build && cd cmake/build && cmake .. && make && sudo make install

ok,至此我们已经有了需要的头文件件和静态库。接下来可以搞事情了。

1.定义proto文件;

2.在项目中引用生成的源码;

3.编译动态库;

问题出现在第3步,如下错误

relocation R_X86_64_32...

问题原因:在protobuf编译的时候没有使用-fPIC选项,导致protobuf的静态库无法用于生成动态库。

二.使用动态库

在遇到上面的问题后,我想使用静态库那么麻烦,还是直接使用动态库吧。在查看CMakeLists.txt后。我在cmake命令中添加了如下参数BUILD_SHARED_LIBS:BOOL=TRUE。即

mkdir cmake/build && cd cmake/build && cmake BUILD_SHARED_LIBS:BOOL=TRUE .. && make && sudo make install

运行结果还是很符合预期的,顺利地生成了protobuf动态库。

接下来在项目中引用proto:

1.定义proto文件;

2.在项目中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值