资源描述:
《protobuf的安装和使用.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、最近领导分配了一个任务,这个工程挺高端的,主要以前从没有搞过,其中里面有protobuf,以前从来没有听说过这个东西,最近在网上看了一些高人的帖子,才知道protobuf是什么云云了,我的理解是,例如我们要用C++写个什么工程,C++是面向对象的,我们要写很多类,估计都得写上上百行,上千行的代码,但是现在用这个protobuf,就可以省很多是,我们只需要写消息包,然后编译,protobuf就会根据这个消息包自动生成两个文件。cc和。h,.h这两个文件中就有很多类,供我们调用。现在说明怎样在Ubuntu下安装protobuf.网上有人说,他用了
2、很多版本的protobuf都没有成功,最终用的2.5。0版本才成功,于是我就直接安装了这个版本,至于其他版本成不成功,我就不知道了。首先下载protobuf源码包在Ubuntu的终端里输入:$wget http://protobuf。googlecode。com/files/protobuf—2.5。0。tar.gz 这是在官网下载,但是我等了很长时间都没有下载下来,最后我在CSDN上下载下来了下载之后解压:$ tarxvzf protobuf—2.5。0.tar.gz 进入到解压后的目录:$ cdprotobuf-2.5.0进行执行
3、: $。/configure 在执行./configure这个命令之前最好把vim,g++,make安装好,不然在执行./configure的时候可能会出现错误,上面三个安装的命令:$sudoapt—getinstallvim $sudoapt-getinstallg++ $sudoapt-getinstallmake。/configure成功之后,接下来是如下几步:$make$makecheck$makeinstall //在执行这一步的时候,我出现了错误,错误的意思是执行的权限不够,如果是这样的话,$makeinstall这条命名就
4、换成$sudomakeinstall下面我们要修改一下配置文件:$vim~/.profile在打开的文件中,在文件末尾添加如下代码:exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib然后保存退出,接下来执行:$source ~/.profile使刚才修改的配置文件生效,接下来执行: $protoc-—version如果上面的步骤一切顺利的话,那么就会在终端显示protobuf的版本号,如下下面我们来测试一下,在测试之前我们最好先建立一个文件夹,例如上面的proto,接下的操作都在这个文
5、件夹下进行。我们先用vim创建并编辑。proto文件,例如:$ vimmsg.proto内容如下:然后执行下面的命令:$protoc-I=. --cpp_out=。msg.proto执行这条命名之后,在当前目录下就会生成如下的两个文件:这两个文件就是根据上面的那个msg.proto文件生成了,里面有类的声明和类的实现,我们可以进入这两个文件。研究一下,这里就不在说明了.然后我们就可以调用类和里面的函数实现自己的功能了,下面是两个简单的测试文件:我们先创建: $ vimwrite.cc内容如下:然后编译write。cc,命名如下:$g++ m
6、sg。pb。ccwrite.cc-o write `pkg-config-—cflags-—libsprotobuf` -lpthread执行生成的write文件,命令为:$。/write可看到生成的msg.pb文件,这个文件是由fstream output(“./msg。pb”,ios::out|ios::trunc|ios::binary)函数生成的下面在创建一个文件:$ vimreader.cc内容如下:编译reader.cc文件:命令为:$g++ msg.pb.ccreader.cc—o reader `pkg-config——c
7、flags --libsprotobuf`-lpthread然后执行生成的reader文件。命令如下:。/reader在终端就会打印出:101Hello上面在生成可执行文件的过程,都是我们一条一条命令的输入,我们可以写Makefile,然后执行一条make命令,就可以自动生成可执行文件,编写Makefile文件:$vimMakefile内容如下:编写完之后,执行:$make就会自动生成可执行文件write和readerProtobuffer语言详解:Defined AMessageTypemessageSearchRequest{ﻩrequi
8、redstringquery= 1;oprionalint32page_number=2;optionalint32result_per_page =3;}上面Se