页次: 1
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/
离线
页次: 1