最近有一个项目需要在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 .. &