个人知识管理站

分享个人生活、工作、学习过程中各种所学、所见、所闻,有趣的、好玩的、技术积累等各方面的内容。

您尚未登录。

公告

不积跬步无以至千里,不积小流无以成江海,网址:www.itecfun.com

#1 2018-10-17 10:32:23

xuyg
管理员
注册时间: 2015-01-21
帖子: 667

Centos 安装protobuf 3.6

protobuf是Google开发出来的一个语言无关、平台无关的数据序列化工具,在rpc或tcp通信等很多场景都可以使用。通俗来讲,如果客户端和服务端使用的是不同的语言,那么在服务端定义一个数据结构,通过protobuf转化为字节流,再传送到客户端解码,就可以得到对应的数据结构。这就是protobuf神奇的地方。并且,它的通信效率极高,“一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一”。

1、安装

编译安装protobuf的编译器protoc
wget https://github.com/protocolbuffers/prot … 6.0.tar.gz

tar zxvf protobuf-3.6.0.tar.gz

cd protobuf-3.6.0

./autogen.sh #执行时出现错误

[root@master protobuf-3.6.0]# ./autogen.sh
+ autoreconf -f -i -Wall,no-obsolete
./autogen.sh: line 32: autoreconf: command not found

安装autoreconf,automake

yum -y install automake autoreconf

安装完成后,重新执行
./autogen.sh

出现错误

[root@master protobuf-3.6.0]# ./autogen.sh
+ autoreconf -f -i -Wall,no-obsolete
configure.ac:104: error: possibly undefined macro: AC_PROG_LIBTOOL
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: /usr/bin/autoconf failed with exit status: 1

这个错误的出现,还得安装libtool (为了保证不出错 ,还可安装一个工具:sudo apt-get install libsysfs-dev,这里没装也能成功)
yum install libtool

再次执行

./autogen.sh
执行成功,
目录下生成configure 文件

依次执行
./configure

make

make check

make install

安装完成后,Centos的系统默认安装目录为
/usr/local/bin
/usr/local/lib,
/usr/local/include

到这一步就可以使用protobuf了
$ protoc -I=./ --cpp_out=./ test.proto
到test.proto文件所在目录使用命令
protoc -I=./ --cpp_out=./
生成C++版本的协议文件
一切OK的话,在当前目录看到.h和.cc文件

编译如果出现找不到符号和链接错误请记得加上链接选项 -lprotobuf
并确认你的静态库路径是否生效

$ echo $LIBRARY_PATH


附自定义安装:

protobuf默认安装在 /usr/local 目录
你可以修改安装目录通过 ./configure --prefix=命令
虽然我是root用户但觉得默认安装过于分散,所以统一安装在/usr/local/protobuf下

$./configure --prefix=/usr/local/protobuf
$ make
$ make check
$ make install

到此步还没有安装完毕,在/etc/profile 或者用户目录 ~/.bash_profile
添加下面内容
####### add protobuf lib path ########
#(动态库搜索路径) 程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
#(静态库搜索路径) 程序编译期间查找动态链接库时指定查找共享库的路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
#执行程序搜索路径
export PATH=$PATH:/usr/local/protobuf/bin/
#c程序头文件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
#c++程序头文件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
#pkg-config 路径
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

离线

页脚

©2019 YG Wang 备案号: 赣ICP备19010196号-1