本篇文章主要解决mac下安装ProtoBuffer,编译go版本gRPC用的.proto文件

安装 protoc

注意,gRPC 需要用到 proto3, 而目前 Release 的版本是 2.6.1, 所以我们需要去下载源码并编译。

https://developers.google.com/protocol-buffers/docs/downloads?hl=zh-cn

protobuf 的源码在: https://github.com/google/protobuf

Mac的特有前置安装需求

对Mac 用户来说, Unix tools 默认是不可用的, 需要首先安装 Xcode , 然后在 terminal 运行下面命令:

  1. $ sudo xcode-select install

Mac下面除了用dmg、pkg来安装软件外,比较方便的还有用MacPorts\brew , 它们能帮助你安装其他应用程序,

port 的下载地址: https://www.macports.org/install.php

port 安装 autoconf automake libtool  的命令为:

  1. $ sudo /opt/local/bin/port install autoconf automake libtool
  1. brew 的命令为: brew install autoconf automake libtool
  1. 否则我们就需要象下面这样,一个个的编译安装。
  1. http://www.cainiaoer.com/2014/10/560.html
  1. 下面是我 brew 安装的截屏:

  1.  

Unix 下 Protocol Buffers 的编译

由于我们的代码是 github 下载的, 所以我们需要先产生 配置脚本

  1. $ ./autogen.sh

这个命令将下载gtest 源码到当前目录, 并运行 automake, autoconf 等产生配置脚本和各种模板的 makefile。

如果你使用的是 release 包, 可以跳过这一步。  下载这里,如果你无法通过命令行下载,可以手工下载后,copy到对应目录, 不过要在这个sh文件中注释掉下载那一行。

编译安装

依次执行下面命令,完成编译、安装。

  1. $ ./configure
  2. $ make
  3. $ make check
  4. $ make install

安装完成后,需要确认安装的版本是 3。:

整个编译安装过程请参考:

https://github.com/google/protobuf

https://github.com/google/protobuf/blob/master/INSTALL.txt

安装 proto的 Go插件

  1. go get -a github.com/golang/protobuf/protoc-gen-go

-a 参数标示下载好后直接做 go install

编译 .proto 文件

我们这里准备编译的 proto 文件如下,这个文件名 lm.helloworld.proto , 比较好的习惯就是这样命名: packageName.MessageName.proto:

syntax = "proto3";
package lm;
message helloworld
{
    int32  id  = 1; // ID
    string str = 2; // str
    int32  opt = 3;
}

在 protobuf 的术语中,结构化数据被称为 Message。proto 文件非常类似 java 或者 C 语言的数据定义。

在这个例子中,package 名字叫做 lm,定义了一个消息 helloworld,该消息有三个成员,类型为 int32 的 id 和 opt,另一个为类型为 string 的成员 str。

注意,我们这里标示了 syntax = "proto3";

前面的 proto 相关工具准备好后, 我们执行下面命令即可产生这个idl文件对应的 go实现类。

假设你是在下面选中的目录下执行命令,期望生产的go版本的proto文件在 lm 目录下。

则执行下面命令。

protoc -I ../protos ../protos/lm.helloworld.proto  --go_out=plugins=grpc:lm

跟 proto文件产生在同一个目录,则命令是:

protoc -I ../protos ../protos/lm.helloworld.proto  --go_out=plugins=grpc:.

生产的Go代码文件:

proto 3 的语言向导请参看: https://developers.google.com/protocol-buffers/docs/proto3?hl=zh-cn

编译gRPC Go版本使用的 ProtoBuffer 文件的更多相关文章

  1. windows下编译Android版本的boost库文件

    1.起因: 手上有一个用到了boost的asio库和thread库的工程要编译到手机上(Android版本和ios版本),本文只介绍如何编译到Android版本,ios版本之后再介绍,也许就不介绍了( ...

  2. 编译gRPC

    编译gRPC 目录 一.概述 二.编译gRPC 三.C#中使用gRPC 四.C++中使用gRPC 无论通过哪种语言调用gRPC,都必须要编译gRPC,因为生成proto访问类时,除了产生标准的数据定义 ...

  3. 初识google多语言通信框架gRPC系列(二)编译gRPC

    目录 一.概述 二.编译gRPC 三.C#中使用gRPC 四.C++中使用gRPC 无论通过哪种语言调用gRPC,都必须要编译gRPC,因为生成proto访问类时,除了产生标准的数据定义类之外,还需要 ...

  4. VS 2013编译64位版本QT 4.8.6及使用cmake为依赖QT生成VS项目时Could NOT find Qt4

    对于一些已经解决的问题,本博客不再讨论.只将本人遇到的问题做简单的说明. 一.VS 2013编译64位版本QT 4.8.6 QT项目官网中,对于QT4,其只提供了windows X86的版本,并且支持 ...

  5. 让QT编译快一点(增加基础头文件)

    姚冬,中老年程序员 进藤光.杨个毛.欧阳修 等人赞同 我是来反对楼上某些答案的.我曾经用MFC写了金山词霸(大约20多万行),又用Qt写了YY语音(大约100多万行),算是对两种框架都比较有经验.纠正 ...

  6. [转载]Linux 环境下编译 0.11版本内核 kernel

    最近在看<.如果Clobber/Modify 为空,则其前面的冒号(:)必须省略. 2.如果Output,Input,Clobber/Modify都为空,Output,Input之前的冒号(:) ...

  7. Windows7 WIN 7 64位 环境编译6sv2.1版本的大气传输模型

    从来没见过Fortran...这次为了添加国产卫星光谱响应的支持,只能从零开始肯了. 6S模型主页:http://6s.ltdri.org/index.html. 下载最新的2015年更新的6SV2. ...

  8. 在Windows系统上一批可以下载但是需要经过编译再安装的第三方的直接编译后的版本(UCI页面)

    在Windows系统上一批可以下载但是需要经过编译再安装的第三方的直接编译后的版本(UCI页面) (https://www.lfd.uci.edu/~gohlke/pythonlibs/) win10 ...

  9. libcurl开源库在Win7 + VS2012环境下编译、配置详解 以及下载文件并显示下载进度 demo(转载)

    转载:http://blog.csdn.net/fengshuiyue/article/details/39530093(基本教程) 转载:https://my.oschina.net/u/14207 ...

随机推荐

  1. day 108 项目luffy &contenttype

     反向查询  反向查询 路飞学城项目  一.建模型 models from django.db import models from django.contrib.contenttypes.field ...

  2. Breadth-first Search-690. Employee Importance

    You are given a data structure of employee information, which includes the employee's unique id, his ...

  3. vertical-tical

    通常我们需要垂直对齐并排的元素. CSS提供了一些可实现的方法:有时我用浮动float来解决,有时用position: absolute来解决,有时甚至是“肮脏”地手动添加的margin或paddin ...

  4. 【hdu6035】 Colorful Tree dfs序

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6035 题目大意:给你一棵树,树上每个节点都有一个颜色. 现在定义两点间的距离为两点最短路径上颜色集合 ...

  5. Java中equals,hashcode

         在Java语言中,Object对象中包含一个equals和hashCode方法,其中hashCode方法是由JVM本地代码(native code)实现的,返回值是一个有符号的32位整数,对 ...

  6. Mysql 5.7版本安装:mysql 服务无法启动。

    一.解压文件 下载好MySQL后,解压到D盘下,也可以根据个人喜好解压在其他盘符的路径下,解压后的路径是:D:\mysql-5.7.17-winx64.解压好后不要太兴奋,需要配置默认文件呢! 二. ...

  7. tensorflow model save and restore

    TensorFlow 模型保存/载入 我们在上线使用一个算法模型的时候,首先必须将已经训练好的模型保存下来.tensorflow保存模型的方式与sklearn不太一样,sklearn很直接,一个skl ...

  8. LR、HMM、CRF和MaxEnt区别

    LR:Logistic 是 Softmax 的特殊形式,多以如果 Softmax 与 MaxEnt 是等价的,则 Logistic 与 MaxEnt 是等价的. HMM模型: 将标注看作马尔可夫链,一 ...

  9. [LeetCode]LinkedList Cycle

    题目说明 Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without usi ...

  10. 笔记一:python安装和执行

    一:学习内容 python安装 python简介 python执行 二:python安装 1. 下载python,网地址:https://www.python.org/,进入地址后,点击下载downl ...