测试环境:Ubuntu 16.04 LTS

  1. protobuf的release页面

    下载源码:https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protobuf-all-3.6.1.tar.gz

  2. 安装编译依赖

    sudo apt-get install autoconf automake libtool curl make g++ unzip
  3. 解压、编译、安装(测试时是非root帐号,所以install时需要sudo)

    tar -xvf protobuf-all-3.6.1.tar.gz
    cd protobuf-3.6.1
    ./configure --prefix=/usr/local/protobuf
    make
    make check
    sudo make install
  4. 配置1:环境变量(参考链接

    vim /etc/profile
    添加两行:
    export PATH=$PATH:/usr/local/protobuf/bin/
    export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/ source /etc/profile ~/.profile中也添加上面两行
  5. 配置2:动态链接库

    cd /etc/ld.so.conf.d/
    sudo vi protobuf.conf
    添加一行:
    /usr/local/protobuf/lib ldconfig
  6. 确认版本

    $ protoc --version
    libprotoc 3.6.1
  7. 验证(转自

    vi message.proto

    syntax = "proto3";
    
    message Person {
    int32 id = 1;
    string name = 2; repeated Phone phone = 4; enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
    } message Phone {
    string number = 1;
    PhoneType type = 2;
    }
    }

    protoc --java_out=./java ./proto/message.proto

  8. java代码验证



    maven引入:

     <dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java-util</artifactId>
    <version>3.6.1</version>
    </dependency>

    gradle引入:

    compile 'com.google.protobuf:protobuf-java:3.6.1'

    java代码

     import com.google.protobuf.InvalidProtocolBufferException;
    
     import java.util.Arrays;
    import java.util.List; public class App { public static void main(String[] args) {
    Message.Person.Builder personBuilder = Message.Person.newBuilder();
    personBuilder.setId(12345678);
    personBuilder.setName("Admin");
    personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10010").setType(Message.Person.PhoneType.MOBILE));
    personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10086").setType(Message.Person.PhoneType.HOME));
    personBuilder.addPhone(Message.Person.Phone.newBuilder().setNumber("10000").setType(Message.Person.PhoneType.WORK)); Message.Person person = personBuilder.build();
    byte[] buff = person.toByteArray(); try {
    Message.Person personOut = Message.Person.parseFrom(buff);
    System.out.printf("Id:%d, Name:%s\n", personOut.getId(), personOut.getName()); List<Message.Person.Phone> phoneList = personOut.getPhoneList(); for (Message.Person.Phone phone : phoneList) {
    System.out.printf("PhoneNumber:%s (%s)\n", phone.getNumber(), phone.getType());
    } } catch (InvalidProtocolBufferException e) {
    e.printStackTrace();
    } System.out.println(Arrays.toString(buff)); } }

其他

  1. Google Protocol Buffer 的使用和原理
  2. 序列化性能比较

ubuntu编译安装protobuf的更多相关文章

  1. Ubuntu编译安装nginx,php,mysql

    摘要: 整理的Ubuntu编译安装nginx,php,mysql的步骤,主要来自对驻云的sh-1.4.1中脚本的整理,随时代进步,内容中的软件或者命令请自行更新 目录准备 创建用户 userdel w ...

  2. Ubuntu 编译安装 nginx

    有关博客: <Windows 编译安装 nginx 服务器 + rtmp 模块>.<Ubuntu 编译安装 nginx>.<Arm-Linux 移植 Nginx> ...

  3. Ubuntu编译安装php7.4

    Ubuntu编译安装php7.4  [root@ubuntu2004 php-7.4.30]#apt install gcc libssl-dev libxml2-dev libsqlite3-dev ...

  4. 在 Ubuntu 上安装 Protobuf 3

    什么时候需要安装 如果使用 protoc 命令,遇到 Protoc not found,表示未安装.或者,执行时出现错误:This parser only recognizes "proto ...

  5. Ubuntu 编译安装 Linux 4.0.5 内核,并修复 vmware 网络内核模块编译错误

    . . . . . 今天把 Ubuntu 14.04 升级到了最新的 4.0.5 的内核版本,本来不打算记录下来的,但是升级的过程中确实遇到了一些问题,所以还是记录下来,分享给遇到同样问题的猿友. 先 ...

  6. 【转】Ubuntu编译安装mysql源码

    主要参考了下面两篇文章 http://forum.ubuntu.org.cn/viewtopic.php?t=330121 http://www.linuxidc.com/Linux/2011-09/ ...

  7. Ubuntu 编译安装 OpenCV 3.1

    目标系统:Ubuntu 16.04-64bit OpenCV 版本:opencv-3.1.0 安装步骤 安装 cmake.sudo apt-get isntall cmake cmake-qt-gui ...

  8. ubuntu编译安装php7遇到的问题及解决方案

    configure: error: Cannot find OpenSSL's <evp.h> 这个可以在configure的时候,指定openssl的路径,查看openssl的安装路径: ...

  9. Ubuntu编译安装nginx以及配置自动启动

    本文主要介绍ubuntu如何编译安装nginx以及遇到的问题 和 配置系统自动启动服务 查看操作系统版本 cat /etc/issue  Ubuntu 18.04.3 LTS \n \l    更改镜 ...

随机推荐

  1. java经典开发模式

    Java Web开发方案有多种可供选择,这里列举一些经典的开发模式进行横向比较,为Java Web的开发模式选择提供参考.除此之外还有好多方案(如Tapestry和Wicket等等)并不了解,这里就不 ...

  2. leancloud js SDK 学习

    测试页面 AV.initialize("id", "key"); var TestObject = AV.Object.extend("TestObj ...

  3. 第一周leetcode

    3/27 胡乱投了一堆简历,做了七牛的笔试,看了腾讯的面试题 感觉不懂的还是很多啊,不过也知道了笔试套路其实也不多,基本算法/数据结构(不会太难).c/c++基础(后面的知识类似虚函数需要了解).li ...

  4. HTML解析器软件

    HTML解析器软件 HTML文档解析器 HTMLParser HTML Parser 是一个对HTML进行分析的快速实时的解析器,最新的发行版本是1.6,另外2.0的开发版本已经两年没有进展了.示例代 ...

  5. python怎么生成requirements.txt文件

    生成文件: pip freeze > requirements.txt 安装依赖: pip install -r requirements.txt

  6. Jenkins权限管控

    需求: 不同的账号角色进入只能看到自己对应的项目,且只能拥有构建等基本权限. 如wechat用户进入系统只能看到以wechat开头的job(具体匹配什么名称的job,可以设置) 目录: 1.安装插件 ...

  7. C# 调用人脸识别 虹软ArcFace2.0实例

    虹软SDK推出了2.0版本,这个版本的所有API都集合在一个动态库里面,再通过引擎库调用,比1.2版本相对轻便了很多. 了解详情戳这里 小西瓜也迫不及待弄了一个新版本的C#实例,基于VS2013开发的 ...

  8. 循环语句(循环for与while等)

    1.1for循环 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  9. acedSSGet 翻译

    ObjectARX 参考指南 > 全局函数 > AcEd 全局函数 > acedSSGet 函数 acedSSGet 折叠全部 C++ int acedSSGet( const AC ...

  10. java后台简单从腾讯云下载文件通知前端以附件的形式保存

    腾讯云对象存储和阿里云差不多 这是我的配置 /** * 腾讯云client * @return COSClient */ public static COSClient getCOSClient() ...