为了使用源码编译protobuf,需要下面的工具:

autoconf, automake, libtool, make, g++, unzip

如果你使用ubuntu/debian,你可以使用如下方式安装这些工具:

$ sudo apt-get install autoconf automake libtool curl make g++ unzip

在其他系统中,请使用对应的包管理工具安装这些必要的工具。

为了获得源码,可以从如下的地址下载一个.tag.gz包或者.zip包,这个取决于自己的喜好。

https://github.com/protocolbuffers/protobuf/releases/latest

如果你只需要C++,下载protobuf-cpp-[version].tar.gz,如果你还需要使用其他语言,例如java,你可以只下载protobuf-java-[version].tar.gz(每一个包中都已经包含了C++源码),如果你除了C++,还需要多种语言,下载protobuf-all-[version].tar.gz。

为了编译和安装C++ Protocal Buffer运行环境和Protocol Buffer编译器(protoc),执行下面的指令:

$ ./configure --prefix=... (下面会讲解)

$ make      # 这个步骤时间可能会很长

$ make check    # 这个步骤时间可能会很长

$ sudo make install

$ sudo ldconfig # refresh shared library cache.

如果”make check”失败了,你仍然可以安装,但是protobuf的有些特征在你的电脑上不能正确工作。如果你坚持安装,你就需要考虑这个风险。

注解:

1. 关于安装位置

如果使用./configure后面不带-prefix参数,那么这个包将会安装到/usr/local。然而,在很多平台中,/usr/local/lib不是LD_LIBRARY_PATH(用来搜索共享库)的一部分。你可以把这个目录添加成为LD_LIBRARY_PATH的一部分,你也可以将protobuf安装到/usr。为了实现这个效果,调用./configure的时候,使用如下语句:

./configure --prefix=/usr

如果在一个系统中需要同时使用多个protobuf版本,可以考虑将protobuf安装到各自的文件夹中,然后显示指定LD_LIBRARY_PATH,从而避免冲突。

如果你已经将protobuf构建到一个不同的前缀(prefix),先调用”make clean”, 然后再重新构建一次。

2. 编译依赖包

为了编译一个使用protobuf的包,你需要传入各种参数给编译器和链接器。2.2.0版本开始,protobuf可以使用pkg-config得到这些参数。如果你已经安装了pkg-config,你可以调用如下指令来获取这些参数:

pkg-config --cflags protobuf # print compiler flags

pkg-config --libs protobuf # print linker flags

pkg-config --cflags --libs protobuf # print both

在我的电脑中,

pkg-config --cflags protobuf 输出 -pthread -I/usr/local/include

pkg-config --libs protobuf 输出 -L/usr/local/lib -lprotobuf -pthread

例如可以使用如下方式编译使用protobuf的C++代码:

c++ my_program.cc my_proto.pb.cc `pkg-config --cflags --libs protobuf`

3. 二进制兼容性警告

由于C++的特性,两个protobuf版本的基本不会有兼容的ABIs。如果你使用一个旧版本的libprotobuf链接程序,这个程序一般不能够使用新版本的动态库运行。这个问题会在你的程序刚启动的时候,就被发现。为了避免这种情况,你也可以考虑使用静态链接,方法就是,在编译时,只安装静态库:

$ ./configure --disable-shared

以上只是安装完成了C++版本的proto的编译环境,对于其他语言,需要安装额外的插件,这里只讲述go语言,因为我使用go语言比较多。

首先记得安装go的开发环境,这点,我不打算说明。

最简单安装go插件的方式是:

go get -u github.com/golang/protobuf/protoc-gen-go

go的插件是protoc-gen-go,调用过上面的指令后,如果$GOBIN没有被设置,这个插件会被安装在$GOPATH/bin目录,如果$GOBIN和$GOPATH都没有设置,默认应该在~/go/bin目录。我们需要将protoc-gen-go所在的目录添加到$PATH目录中,否则在调用如下语句时:

  protoc -I=. --go_out=. addressbook.proto

会报错:

protoc-gen-go: program not found or is not executable
--go_out: protoc-gen-go: Plugin failed with status code 1.
如果想要安装一个特定版本的protoc-gen-go(从而对应proto包的版本),可以采取的方式如下:

GIT_TAG="v1.2.0" # change as needed

go get -d -u github.com/golang/protobuf/protoc-gen-go

git -C "$(go env GOPATH)"/src/githubcom/golang/protobuf checkout $GIT_TAG

go install github.com/golang/protobuf/protoc-gen-go

在linux中安装protobuf编译器和运行时环境的更多相关文章

  1. Linux中安装C++编译器codeBlock,并配置opencv链接库

    1.Linux中安装codeBlock https://blog.csdn.net/xinyunyishui/article/details/50967395 2.CodeBlock中的中文显示不完全 ...

  2. Linux中安装字体

    Linux中安装字体 查看系统中的字体 fc-list 查看系统中的中文字体 fc-list :lang=zh将然后将字体文件拷贝到/usr/share/fonts/中 cp aa.ttl /usr/ ...

  3. Linux中安装nodejs及插件

    Linux中安装nodejs及插件 1.去官网下载安装包 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn/download/ 通过 ...

  4. Linux中安装python3.6和第三方库

    Linux中安装python3.6和第三方库 如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境,比如yum!!!!! ...

  5. Linux中安装python3

    [centos7中安装python3]http://blog.csdn.net/wjqwinn/article/details/75633714 (一)安装python3前的准备工作1.修改文件中第一 ...

  6. 在Linux中安装JDK和IDEA

    前言 寒假安装虚拟机的时候我就没有安装好,到学校之后,因为时间紧加上更习惯Windows的操作习惯,我只在Windows上安装了JDK和IDEA,但是随着学习的深入,我发现用虚拟机写命令行.新建jav ...

  7. Linux中安装配置spark集群

    一. Spark简介 Spark是一个通用的并行计算框架,由UCBerkeley的AMP实验室开发.Spark基于map reduce 算法模式实现的分布式计算,拥有Hadoop MapReduce所 ...

  8. 在Linux中安装和配置OpenVPN Server的最简便方法!

    本文介绍了如何在基于RPM和DEB的系统中安装和配置OpenVPN服务器.我们在本文中将使用一个名为openvpn-install的脚本,它使整个OpenVPN服务器的安装和配置过程实现了自动化.该脚 ...

  9. 完全零基础在Linux中安装 JDK

    完全零基础在Linux中安装 JDK 总体思路:先确定没有Java程序了 — 然后创建相应路径文件夹 — 下载JDK — 解压到当前路径 — 自定义文件名称 — 配置环境变量 — 检查是否安装成功 第 ...

随机推荐

  1. iOS 二维码 学习

    这段时间忙着交接工作,找工作,找房子,入职,杂七杂八的,差不多一个月没有静下来学习了.这周末晚上等外卖的时间学习一下二维码的制作与扫描. 项目采用OC语言,只要使用iOS自带的CoreImage框架, ...

  2. Unity存储路径

    一.在项目根目录中创建Resources文件夹来保存文件 可以使用Resources.Load("文件名字,注:不包括文件后缀名");把文件夹中的对象加载出来注:此方可实现对文件实 ...

  3. canvas绘制随机验证码

    效果图: 思路: 1, 绘制canvas画布,进行基础设置 2.绘制一个矩形 3.设置验证码的随机数 4.设置验证码随机数的随机颜色 5.绘制随机干扰线 6,绘制随机干扰点 经过以上六个步骤,验证码的 ...

  4. iOS原生自动布局NSLayoutConstraint

    AutoLayout概念是苹果自iOS6开始引入的概念. 目前为止,实现自动布局技术选型方面也可以使用xib和storyboard.在开发过程中通常登录.注册等变动可能性较小的视图,我会采用xib开发 ...

  5. 2019 Power BI最Top50面试题,助你面试脱颖而出系列<上>

    距离4月还剩11天, 你是否还在投简历找工作而机会寥寥? 你是否还在四处奔波疲于面试而结果不意? ....... 知否知否, 天下武功唯快不破, 传说江湖有本Power BI 面试真香秘籍, 能助你快 ...

  6. [转]https://www.jianshu.com/p/06443248f4d8

    eos是什么? 原文 https://www.jianshu.com/p/06443248f4d8 简介 用一句话来定义eos,即:区块链操作系统,支持在它之上构建dapp,支持智能合约.帐户.身份验 ...

  7. Hadoop学习笔记1 - 使用Java API访问远程hdfs集群

    转载请标注原链接 http://www.cnblogs.com/xczyd/p/8570437.html 2018年3月从新司重新起航了.之前在某司过了的蛋疼三个月,也算给自己放了个小假了. 第一个小 ...

  8. Linux上更换默认的java版本

    最近注意的一个问题: 在Server上和本地里都使用了相同版本的Tomcat,但是在Server上的tomcat日志里会出现很多java异常的错误, 但是本地的tomcat日志没有出现,初步判断应该是 ...

  9. VMware 虚拟机安装-->wrf、cmaq安装

    微信关注公众号 “软件安装管家” 下载并安装VMware 下面简要记载我的安装和设置步骤: 下载解压,右键以管理员方式运行 安装好了之后 双击桌面 的VMware 输入许可证密钥:AA510-2DF1 ...

  10. Azure monitor Portal 、Azure monitor API监控指标、性能监视器常用指标