在linux中安装protobuf编译器和运行时环境

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

autoconf, automake, libtool, make, g++, unzipc++

若是你使用ubuntu/debian,你可使用以下方式安装这些工具:git

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

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

为了得到源码,能够从以下的地址下载一个.tag.gz包或者.zip包,这个取决于本身的喜爱。ubuntu

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

若是你只须要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),执行下面的指令:url

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

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

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

$ sudo make install

$ sudo ldconfig # refresh shared library cache.

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

编译proto文件的方法参考下面这条语句:

protoc --cpp_out=. addressbook.proto

注解:

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

 

例如可使用以下方式编译使用protobufC++代码:

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

相关文章
相关标签/搜索