鱼C论坛

 找回密码
 立即注册
查看: 1408|回复: 0

[技术交流] 【格式有错误请版主删除】protobuf-c的使用(一)构建

[复制链接]
发表于 2017-1-14 22:32:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 kid2412 于 2017-1-14 22:50 编辑

protobuf很出名,是google开发的序列化库,很多公司都使用它作为接口的数据结构。地址:https://developers.google.com/protocol-buffers/
支持Java、c++、Go等多种语言,几乎所有主流语言都支持,但是官方没给出C语言的支持。经过一番寻找,找到了protobuf-c。在github中有很多protobuf c版本的实现,不过个人感觉还是这个protobuf-c更直接。其github地址:https://github.com/protobuf-c/protobuf-c
在接下来的文章中,我会介绍protobuffer的结构和语法。同时说明protobuf-c的使用。在这篇文章中,先来试试构建protobuf-c。
在构建protobuf-c之前,我们需要安装一些依赖库:autoconf、automake、protobuffer、libtool,当然也需要一些基本的系统依赖(如:gcc-c++等)。autoconf、automake和libtool可以直接使用apt-get、yum、brew等安装。protobuffer虽然也可以使用libprotobuf,不过还是推荐源码安装。这里有一些坑,我会在下面逐一说明。注意安装环境这里只介绍mac和Linux,linux采用debian系列的。
一、安装依赖
下面逐一安装依赖:
  • mac下安装:mac下使用brew安装,如果读者没有安装brew,请自行参考http://www.brew.sh
    sudo brew install autoconf automake libtool
    • 1
    • 1

                                   
    登录/注册后可看大图
  • linux下安装:debian系列使用apt-get安装,rhel系列使用yum安装。

sudo apt-get install automake autoconf libtool
  • 1
  • 1

                               
登录/注册后可看大图
二、构建protobuffer
构建protobuffer其实mac和linux上没任何区别,但是需要注意在mac El Capitan 版本中加入了Rootless,不能使用root对/usr/include进行增删改。在构建protobuffer和protobuf-c的时候会将一些c的头文件写到/usr/include下,方便调用。所以我们需要把Rootless禁用掉,禁用方法如下:
  • 重启mac,按住command+R进入恢复模式
  • 等待一段时间后,选择恢复模式使用的语言,进入恢复模式
  • 打开终端,输入csrutil disalble,可以直接禁用Rootless。
  • 重启mac。
需要注意,在构建完protobuffer和protobuf-c以后建议恢复Rootless,跟禁用方式相同,只不过把命令改成csrutil enable即可。
下面介绍构建protobuffer,这里使用2.6.1:
  • https://github.com/google/protobuf/releases/tag/v2.6.1 下载2.6.1的源码包:protobuf-2.6.1.tar.gz解压
    tar zxvf protobuf-2.6.1.tar.gz
  • 执行./autogen.sh脚本,生成configure配置脚本。

                                   
    登录/注册后可看大图
  • 执行./configure配置,注意最好指定一下安装参数
    ./configure --prefix=/usr/local/protobuf --
    libdir=/usr/lib

                                   
    登录/注册后可看大图
  • 执行make进行构建

                                   
    登录/注册后可看大图
  • 执行sudo make install安装

                                   
    登录/注册后可看大图

三、构建protobuf-c
注意如果在构建protobuf-c之前没有安装protobuf的话,生成protobuf-c的configure文件肯定会报如下错误!!
configure: error: Package requirements (protobuf >= 2.6.0) were not
met:No package ‘protobuf’ found
构建protobuf-c其实跟protobuffer几乎没任何区别,也是通过autogen.sh脚本生成configure配置脚本,然后执行make和install。但是需要注意的是protobuf-c在构建的时候不会自动把相关头文件拷贝到/usr/include下,需要手动拷贝。
https://github.com/protobuf-c/protobuf-c.git 克隆下protobuf-c源码。
Git clone https://github.com/protobuf-c/protobuf-c.git
与构建protobuffer一样,分别执行:
./autogen.sh
  • 1
  • 1

                               
登录/注册后可看大图
./configure --prefix=/usr/local/protobuf-c --libdir=/usr/lib/
  • 1
  • 1
注意prefix不要与protobuffer一样,会覆盖protobuffer

                               
登录/注册后可看大图
make
  • 1
  • 1

                               
登录/注册后可看大图
sudo make install
  • 1
  • 1

                               
登录/注册后可看大图
最后把头文件拷贝到/usr/include下
sudo cp -r /usr/local/protobuf-c/include/protobuf-c /usr/include
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 19:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表