精华内容
下载资源
问答
  • protobuf已经全面迁移到github,地址:https://github.com/google/protobuf 直接下载2.6.1版本:https://github.com/google/protobuf/archive/v2.6.1.zip $wget ...

    说明:
    protobuf已经全面迁移到github,地址:https://github.com/google/protobuf
    直接下载2.6.1版本:https://github.com/google/protobuf/archive/v2.6.1.zip

    $wget https://github.com/google/protobuf/archive/v2.6.1.zip
    $unzip protobuf-2.6.1.zip
    $cd protobuf-2.6.1
    vim autogen.sh
    

    下载自github的代码需要首先执行 $ ./autogen.sh 生成configure文件
    注意autogen.sh 需要gtest包,默认是从 googletest.googlecode.com下载,国内需要翻墙才能访问,很多人问autogen.sh运行失败,这里我补充一下
    修改 autogen.sh
    原来的:

    echo "Google Test not present.  Fetching gtest-1.5.0 from the web..."
     curl http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2 | tar jx
     mv gtest-1.5.0 gtest
    

    修改之后:

    wget https://github.com/google/googletest/archive/release-1.5.0.tar.gz
    tar xzvf release-1.5.0.tar.gz
    mv googletest-release-1.5.0 gtest
    

    在这里插入图片描述
    运行./autogen.sh 生成 configure
    自定义安装路径:

    protobuf默认安装在 /usr/local 目录
    你可以修改安装目录通过 ./configure --prefix=命令
    虽然我是root用户但觉得默认安装过于分散,所以统一安装在/usr/local/protobuf下
    
    $./configure --prefix=/usr/local/protobuf
    $ make
    $ make check
    $ make install
    
    到此步还没有安装完毕,在/etc/profile 或者用户目录 ~/.bash_profile
    添加下面内容
    ####### add protobuf lib path ########
    #(动态库搜索路径) 程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
    #(静态库搜索路径) 程序编译期间查找动态链接库时指定查找共享库的路径
    export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
    #执行程序搜索路径
    export PATH=$PATH:/usr/local/protobuf/bin/
    #c程序头文件搜索路径
    export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
    #c++程序头文件搜索路径
    export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
    #pkg-config 路径
    export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
    ######################################
    
    

    cd /data0/zhenxin/tools/protobuf-2.6.1/src
    vim QueryByMids.proto

    option java_package = "com.sina";
    option java_generic_services = true;
    option java_generate_equals_and_hash = true;
    
    message MidRequest {
      required int32 date = 1;
      repeated int64 mids = 2;
    }
    
    message MidResult {
      required int32 id = 1;
      required int64 size = 2;
    }
    
    message MidResponse {
      repeated MidResult results = 1;
    }
    
    service QueryByMidsService {
      rpc getResult(MidRequest)
        returns (MidResponse);
    }
    
    
    ./protoc --java_out=. QueryByMids.proto
    

    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    至此如果全部正确:代码不会出现红色了

    展开全文
  • 之前写过一篇博文:《如果终端采用protobuf与采集前置通信,能带来哪些变革?...那么接下来在嵌入式linux之go语言开发实战中,也尝试用protobuf作为序列化和通信的协议格式。 之前想做个protobuf序列化的反向解...

    之前写过一篇博文:《如果终端采用protobuf与采集前置通信,能带来哪些变革?https://blog.csdn.net/yyz_1987/article/details/81147454》,介绍了使用protobuf作为序列化通信格式的诸多好处。

    那么接下来在嵌入式linux之go语言开发实战中,也尝试用protobuf作为序列化和通信的协议格式。

    之前想做个protobuf序列化的反向解析工具,但是发现反向解析工具,现成的就有啊。可以直接拿来用。

    使用方法:

    E:\GOPATH\src\protobuf>cat out.bin | protoc --decode_raw

    直接就输出了反向之后的内容,且无需知道test.proto定义文件。

    protoc.exe可直接从网上下载,下载后放到go/bin的安装路径下即可。

    我下载的是protoc-3.4.0-win32.zip

    protobuf的简单使用:

    先编写*.proto定义文件如test.proto:

    在这个文件中可以定义需要的结构, 例如枚举型, 结构体等等. 那么首先我自己定义了一个结构如下所示,

    syntax = "proto2";
    package test;
    message myMsg
    {
        required int32     id = 1;   // ID
        required string    str = 2;  // str
        optional int32     opt = 3;  //optional field
    }

    注意required是必须要求的字段, optional是可选字段。

    同时注意, id=1, 后面的数字仅仅是一个unique标志而已, 保证唯一性就OK! 
    然后使用protoc test.proto –go_out=. 编译这个文件, 生成的文件名称为test.pb.go文件!

    如果这个路径下有多个文件需要编译, 那么执行protoc –go_out=. *.proto就可以.

    注意–go_out=后面的参数是生成的文件的路径, 本文生成的文件在’.’当前路径下. 

    【proto字段对应关系】

    proto字段类型的对应关系:

    【标识符】

    在消息定义中,每个字段都有唯一的一个数字标识符。

    标识符用来在消息的二进制格式中识别各个字段,一旦使用就不能够再改变。
    最小的标识符可以从1开始,最大到2^29 - 1(536,870,911),不可以使用其中[19000-19999]( Protobuf协议实现中进行了预留。如果非要在.proto文件中使用预留标识符,编译时就会报警。
    [1,15]内的标识号在编码的时候会占用一个字节。[16,2047]之内的标识号则占用2个字节。所以应该为频繁出现的消息元素保留[1,15]内的标识号。

    【字段规则】

    消息的字段修饰符必须是如下之一:
    A、singular:一个格式良好的message应该有0个或者1个该字段(但不能超过1个)。
    B、repeated:在一个格式良好的消息中,该字段可以重复任意多次(包括0次),重复值的顺序会被保留。
    在proto3中,repeated的标量字段默认情况下使用packed。

    以上关于proto对应关系和标识符,字段规则等内容引用自博客《https://blog.51cto.com/9291927/2331980?source=drh

    更多关于proto文件的定义和使用,可参见博文:《https://blog.51cto.com/9291927/2331980?source=drh

    [Protobuf序列化原理]

    1、Protobuf序列化

    Protobuf对于数据存储的三大原则:
    (1)Protocol Buffer将消息中的每个字段进行编码后,利用T - L - V 存储方式进行数据的存储,最终得到一个二进制字节流。
    (2)ProtoBuf对于不同数据类型采用不同的序列化方式(数据编码方式与数据存储方式)
    Protobuf对于不同的字段类型采用不同的编码和数据存储方式对消息字段进行序列化,以确保得到高效紧凑的数据压缩。不同类型的数据采用的编码方式和存储方式如下:
    gRPC快速入门(二)——Protobuf序列化原理解析
    对于Varint编码数据的存储,不需要存储字节长度Length,使用T-V存储方式进行存储;对于采用其它编码方式(如LENGTH_DELIMITED)的数据,使用T-L-V存储方式进行存储。
    (3)ProtoBuf对于数据字段值的独特编码方式与T-L-V数据存储方式,使得 ProtoBuf序列化后数据量体积极小。

    2、WireType=0的序列化

    WireType=0的类型包括int32,int64,uint32,unint64,bool,enum以及sint32和sint64。
    编码方式采用Varint编码(如果为负数,采用Zigzag辅助编码),数据存储方式使用T-V方式存储二进制字节流。

    3、WireType=1的序列化

    WireType=1的类型包括fixed64,sfixed64,double。
    编码方式采用64bit编码(编码后数据大小为64bit,高位在后,低位在前),数据存储方式使用T-V方式存储二进制字节流。

    4、WireType=2的序列化

    WireType=2的类型包括string,bytes,嵌套消息,packed repeated字段。
    对于编码方式,标识符Tag采用Varint编码,字节长度Length采用Varint编码,string类型字段值采用UTF-8编码,嵌套消息类型的字段值根据嵌套消息内部的字段数据类型进行选择,
    数据存储方式使用T-L-V方式存储二进制字节流。

    5、WireType=5的序列化

    WireType=5的类型包括fixed32,sfixed32,float。
    编码方式采用32bit编码(编码后数据大小为32bit,高位在后,低位在前),数据存储方式使用T-V方式存储二进制字节流。

    [Protobuf使用建议]

    基于Protobuf序列化原理分析,为了有效降低序列化后数据量的大小,可以采用以下措施:
    (1)多用 optional或 repeated修饰符 
    若optional 或 repeated 字段没有被设置字段值,那么该字段在序列化时的数据中是完全不存在的,即不需要进行编码,但相应的字段在解码时会被设置为默认值。
    (2)字段标识号(Field_Number)尽量只使用1-15,且不要跳动使用 
    Tag是需要占字节空间的。如果Field_Number>16时,Field_Number的编码就会占用2个字节,那么Tag在编码时就会占用更多的字节;如果将字段标识号定义为连续递增的数值,将获得更好的编码和解码性能。
    (3)若需要使用的字段值出现负数,请使用sint32/sint64,不要使用int32/int64。
    采用sint32/sint64数据类型表示负数时,会先采用Zigzag编码再采用Varint编码,从而更加有效压缩数据。
    (4)对于repeated字段,尽量增加packed=true修饰 
    增加packed=true修饰,repeated字段会采用连续数据存储方式,即T - L - V - V -V方式。

    以上关于protobuf序列化原理和使用建议的介绍,参见一篇写的好的博文:《https://blog.51cto.com/9291927/2332264

    若需要生成供其他语言调用的代码源文件,

    则需要这样:

    protoc --go_out=. test.proto     //生成供go语言使用的结构源文件

    protoc --cpp_out=. test.proto    //生成供c++语言使用的类源文件

    protoc --java_out=. test.proto    //生成供java语言使用的类源文件

    注:能否生成供c语言调用的源码?能否在嵌入式系统上供c使用protobuf?

    也是可以的。参照博文《protobuf在嵌入式linux下的移植及c语言调用https://blog.csdn.net/yyz_1987/article/details/81126877

    注:生成供go语言使用的源文件,需要提前先获取并安装proto-gen-go,

    因为protoc --go_out内部自动调用了protoc-gen-go

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

    这条命令去获取protoc-gen-go,然后go install即可。

    或者直接go install github.com/golang/protobuf/protoc-gen-go

    调用

    protoc --go_out=. test.proto

    生成的代码如下:

    // Code generated by protoc-gen-go.
    // source: 1.proto
    // DO NOT EDIT!
    
    /*
    Package test is a generated protocol buffer package.
    
    It is generated from these files:
    	1.proto
    
    It has these top-level messages:
    	MyMsg
    */
    package test
    
    import proto "github.com/golang/protobuf/proto"
    import math "math"
    
    // Reference imports to suppress errors if they are not otherwise used.
    var _ = proto.Marshal
    var _ = math.Inf
    
    type MyMsg struct {
    	Id               *int32  `protobuf:"varint,1,req,name=id" json:"id,omitempty" bson:"id,omitempty"`
    	Str              *string `protobuf:"bytes,2,req,name=str" json:"str,omitempty" bson:"str,omitempty"`
    	Opt              *int32  `protobuf:"varint,3,opt,name=opt" json:"opt,omitempty" bson:"opt,omitempty"`
    	XXX_unrecognized []byte  `json:"-"`
    }
    
    func (m *MyMsg) Reset()         { *m = MyMsg{} }
    func (m *MyMsg) String() string { return proto.CompactTextString(m) }
    func (*MyMsg) ProtoMessage()    {}
    
    func (m *MyMsg) GetId() int32 {
    	if m != nil && m.Id != nil {
    		return *m.Id
    	}
    	return 0
    }
    
    func (m *MyMsg) GetStr() string {
    	if m != nil && m.Str != nil {
    		return *m.Str
    	}
    	return ""
    }
    
    func (m *MyMsg) GetOpt() int32 {
    	if m != nil && m.Opt != nil {
    		return *m.Opt
    	}
    	return 0
    }
    
    func init() {
    }
    

    注意: 生成的文件中的package是test, 那么文件必须放在test文件夹下!

    否则会报错: “can’t load package: package test: found packages test (test.pb.go) and main (main.go)”

    测试程序:

    // main.go
    package main
    
    import (
    	"fmt"
    	"io/ioutil"
    
    	t "./test"
    	"github.com/golang/protobuf/proto"
    )
    
    // WriteFile 写文件
    //
    func WriteFile(fname, content string) {
    	data := []byte(content)
    	if ioutil.WriteFile(fname, data, 0644) == nil {
    		fmt.Println("写入文件成功:", content)
    	}
    }
    
    // WriteFile1 写文件
    //
    func WriteFile1(fname string, content []byte) {
    	if ioutil.WriteFile(fname, content, 0644) == nil {
    		fmt.Println("写入文件成功:", content)
    	}
    }
    func main() {
    	// 创建一个对象, 并填充字段, 可以使用proto中的类型函数来处理例如Int32(XXX)
    	hw := t.MyMsg{
    		Id:  proto.Int32(1),
    		Str: proto.String("hello"),
    		Opt: proto.Int32(2),
    	}
    
    	// 对数据进行编码, 注意参数是message指针
    	mData, err := proto.Marshal(&hw)
    
    	if err != nil {
    		fmt.Println("Error1: ", err)
    		return
    	}
    	WriteFile1("out.bin", mData)
    
    	// 下面进行解码, 注意参数
    	var umData t.MyMsg
    	err = proto.Unmarshal(mData, &umData)
    
    	if err != nil {
    		fmt.Println("Error2: ", err)
    		return
    	}
    
    	// 输出结果
    	fmt.Println(*umData.Id, "  ", *umData.Str, "  ", *umData.Opt)
    }
    

    序列化后的内容,这里保存为文件out.bin了,可以用16进制打开查看内容。

    不过这protobuf格式,需要按协议解析后才能看得懂,直接看看不出来具体内容。通过protoc.exe可以直接反序列化查看。

    Protobuf的编码是尽其所能地将字段的元信息和字段的值压缩存储,并且字段的元信息中含有对这个字段描述的所有信息。使用了variant是一种紧凑型数字编码。 Protobuf编码的最终结果可以使用下图来表示:

    后续打算对protobuf的协议格式做个研究,对go的protobuf的源码做个解读。

    在嵌入式linux上,执行看看效果,使用如下命令:

    GOOS=linux GOARCH=arm GOARM=7 go build main.go

    即可生成可在嵌入式linux上执行的文件。

    展开全文
  • 最近有一个项目需要在linux系统下使用protobuf,由于在linux系统下的开发经验不足,所以踩了好多坑;因此记录下来,一来以后自己可以查看,二来希望对后来者有帮助。 一.使用静态库(默认生成方式) 也是自己太嫩了...

    最近有一个项目需要在linux系统下使用protobuf,由于在linux系统下的开发经验不足,所以踩了好多坑;因此记录下来,一来以后自己可以查看,二来希望对后来者有帮助。

    一.使用静态库(默认生成方式)

    也是自己太嫩了,上来就按照开源代码的惯用使用套路上来就是怼;

    1.下载源代码:(e.g,官网、github)

    2.mkdir cmake/build && cd cmake/build && cmake .. && make && sudo make install

    ok,至此我们已经有了需要的头文件件和静态库。接下来可以搞事情了。

    1.定义proto文件;

    2.在项目中引用生成的源码;

    3.编译动态库;

    问题出现在第3步,如下错误

    relocation R_X86_64_32...

    问题原因:在protobuf编译的时候没有使用-fPIC选项,导致protobuf的静态库无法用于生成动态库。

    二.使用动态库

    在遇到上面的问题后,我想使用静态库那么麻烦,还是直接使用动态库吧。在查看CMakeLists.txt后。我在cmake命令中添加了如下参数BUILD_SHARED_LIBS:BOOL=TRUE。即

    mkdir cmake/build && cd cmake/build && cmake BUILD_SHARED_LIBS:BOOL=TRUE .. && make && sudo make install

    运行结果还是很符合预期的,顺利地生成了protobuf动态库。

    接下来在项目中引用proto:

    1.定义proto文件;

    2.在项目中引用生成的源码;

    3.编译动态库;

    没有出现问题,动态库可以家在,运行也没有问题;但是问题还是来了,我需要在不同的动态库中引用同一个.proto文件,但是在加载这些动态库的时候只能加载一个,问题如下:

    protobuf file already exists in database:

    问题原因:查了一些,大概是同一个proto在一个项目中不能被引用多次,具体原因还没有探查到(以后可能会更新)。

    三.使用静态库(编译时加-fPIC选项)

    最后没有办法还是只能使用静态库,那就只能遇山翻山、遇水涉水了,这次在CMakeists.txt文件中添加了如下两行内容,使得protobuf在编译的时候添加-fPIC选项。

    SET(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}")
    SET(CMAKE_CXX_FLAGS "-fPIC ${CMAKE_CXX_FLAGS}")

    ok,至此成功地生成了protobuf动态库,而且也不存在多个动态库使用同一份proto文件时只能有一个动态库被加载的情况了。

    四.问题要点

    1.-fPIC选项的作用;这个网上有很多解释,这里不赘述。

    2.多个依赖protobuf动态库的动态库为什么只能有一个被加载?这个在写这篇文章的时候还没有追寻到原因,之后如果有结果再更新。

    展开全文
  • 1.首先到boost官网(http://www.boost.org/users/download/)下载相应版本(boost_1_61_0)的boost源码包,将源码包放到linux服务器指定目录, 如果源码包是以.zip结尾用unzip解压,如果是.tar.gz等结尾用t...

    此文只是简要叙述C++常用库安装步骤

    一、安装boost(源码安装)

    boost 安装方式采用编译源码方式安装,步骤如下:
    
    1.首先到boost官网(http://www.boost.org/users/download/)下载相应版本(boost_1_61_0)的boost源码包,将源码包放到linux服务器指定目录, 如果源码包是以.zip结尾用unzip解压,如果是.tar.gz等结尾用tar命令解压。
    
    2.进入到解压完成后的boost目录,找到bootstrap.sh脚本文件, 然后执行该脚本
    (如果没有执行权限请执行chmod a+x bootstrap.sh ),也可执行./ bootstrap.sh –prefix=安装路径(/usr/include/...) 
    
    3.执行./b2 或者./bjam 命令编译源码如果最终出现failed updating 58 targets...一般是linux服务器没有安装相应的库
    安装过程出现很多和bz及Python库相关的错误,解决方案如下
    sudo apt-get install libbz2-dev  python-dev
    	
    4.安装成功后会在安装目录下生成两个目录:include和lib文件夹
    将include下的boost目录及其所有文件拷贝到/usr/include/,lib下的所有库拷贝到usr/lib/
    命令为: sudo cp –r ./boost  /usr/include/ 
    	  		 sudo cp –r ./lib/* /usr/lib/
    	
    5.使用ls –lrt 查看/usr/include下有没有boost目录及其boost目录下有没有许多文件及其文件夹	
    使用 ls –lrt libboost* 查看/usr/lib/文件夹下有没有许多libboost_filesystem.so.1.60.0 libboost_filesystem.so -> libboost_filesystem.so.1.60.0 类型的文件,如果检查后和步骤5所述说明安装完成了。
    
    有时还需要生成软链接(在windows中相当于创建快捷方式),命令为 ln –s 源文件 目标文件
    

    二、安装ZeroC ICE(命令行安装)

    ICE(3.6.4版) Linux安装命令(ubuntu):
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 5E6DA83306132997
    sudo apt-add-repository "deb http://zeroc.com/download/apt/ubuntu$(lsb_release -rs) stable main"
    
    如果报错 sudo: apt-add-repository: command not found 请执行 {  sudo apt-get install software-properties-common python-software-properties  }
    sudo apt-get update
    sudo apt-get install zeroc-ice-all-runtime zeroc-ice-all-dev
    
    

    三、安装protobuf (源码安装)

    安装步骤如下:(protobuf安装也采用源码编译安装)
    首先获取protobuf相应版本(protobuf.3.1.0版)的源码包,放到linux服务器指定目录
    解压源码包文件,进入到目录
    找到configure文件,看看是否有执行权限若没有执行chmod a+x configure 
    ./configure  --prefix=(/usr/include/)安装目录
    sudo make && make check &&make install
    将源码下的src/google 拷贝到usr/include下,将.libs下的所有文件拷贝到usr/lib下
    
    

    四、安装需要使用的其他库(命令行安装)

    其他库一般使用命令行安装,先查到所需的库然后执行安装命令就可以
    安装库最常用的命令:sudo apt-cache search 库名 
    1.安装tbb
    查找:sudo apt-cache search libtbb  
    查找到libtbb-dev - parallelism library for C++ - development files  
    执行安装命令:sudo apt-get install libtbb-dev
    
    2.安装log4cxx
    查找:sudo apt-cache search liblog4cxx
    查找到:liblog4cxx-dev - Logging library for C++ (development files)
    执行安装命令:sudo apt-get install liblog4cxx-dev
    
    3.安装mysql++
    查找:sudo apt-cache search libmysql++
    查找到:libmysql++-dev - MySQL C++ library bindings (development)
    执行安装命令: sudo apt-get install libmysql++-dev
    
    4.安装curl
    查找:sudo apt-cache search libcurl
    查找到:libcurl4-openssl-dev - development files and documentation for libcurl (OpenSSL flavour)
    执行安装命令:sudo apt-get install libcurl4-openssl-dev
    
    5.安装websocketpp
    查找: sudo apt-cache search libwebsocketpp
    查找到:libwebsocketpp-dev - C++/Boost Asio based websocket client/server library. Dev package
    执行安装命令:apt-get install libwebsocketpp-dev
    
    6.安装libevent
       
    7.安装svn
      sudo apt-get install subversion	
    
    svn 常用命令:
    更新:svn update
    上传:svn commit –m “filename”
    8.安装zip
    查找:sudo apt-cache search libzip
    找到:libzip-dev - library for reading, creating, and modifying zip archives (development)
    执行安装命令:sudo apt-get install libzip-dev
    
    9.安装nginx
    	将nginx 源码包放到服务器指定目录解压
    	进入到解压后的目录中,找到configure文件并给予执行权限 chmod a+x configure
      
    ./configure --prefix=安装目录
    sudo make &&make install 
    
    
    
    10.安装jansson
    sudo apt-get install libjansson-dev
    
    

    五、配置环境变量

    如果将文件拷贝到/usr/include 和usr/lib 下就不需要进行环境变量配置,否则需要使用export 配置环境变量,方便找到相应的路径
    
    配置当前用户有效,更改profile文件:vim .profile , export 相应的目录 如下:
    PROTO_BUF_INC=/usr/include/
    export PROTO_BUF_INC
    
    配置完后需要注销当前终端使之有效,或者执行source .profile命令
    
    如需配置使之所有用户都有效,需要更改/etc/profile文件
    
    
    展开全文
  • 关于什么是protobuf,网上搜搜一大堆,很多人用的都还是...protobuf很出名,是google开发的序列化库,很多公司都使用它作为接口的数据结构。地址:https://developers.google.com/protocol-buffers/ 支持java、c++、...
  • google protobufLinux下安装与使用

    千次阅读 2015-01-15 18:36:16
    一、介绍 ... 鼎鼎大名的Google公司开发出来,并且在Google内部久经考验的一个东东。由此可见,它的作者绝非一般闲杂人等可比。  那这个听起来牛X的东东到底有啥用处捏?简单地说,这个东东干的事儿其实
  • protobuf学习

    2016-09-26 19:53:00
    参考了这篇文章: ...开发环境在我的线下开发机器的 /home/work/data/code/protobuf_demo 用jumbo安装的protobuf,安装目录在/home/work/.jumbo/ 安装命令 jumbo search protobuf jumb...
  • 这里再简单提一下:Protocol Buffers,是Google公司开发的一种数据格式,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。protobuf支持一些主流的语言,唯独没有支持C,所以诞生了第三方的...
  • protobuf初体验

    2019-09-09 14:38:22
    1.开发环境 操作系统:Red Hat Enterprise Linux Server release 7.1 (Maipo) 使用语言:C++(本次使用C++语言) 源码版本:...
  • protobuf_1

    2015-05-25 11:16:00
    我使用的是最新版本的protobufprotobuf-2.6.1),编程工具使用VS2010。简单介绍下google protobuf: ...Google protobuf主要是针对Linux下的开发,但是为了照顾windows的开发人员,google也给出了相...
  • c白白好不容易用automake成功跑出了Hello,linux,本想放开手脚大干一场,写出多线程socket。但是冷静下来一想,我才知道多少点皮毛啊关于make,就想这大干一场!那既然我才知道点皮毛,而且离开了别人的帖子,我...
  • 虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持php、java、c++、python等语言环境。通过将这些类包含在项目...
  • protobuf 使用入门

    千次阅读 2017-02-25 11:00:51
    我把protobuf windows 安装使用经验总结下,其他教材都是针对linux的,直接安装使用。windows版本有些不同。 1 直接下载了windows版本exe进行测试。地址:https://github.com/google/protobuf/releases protoc...
  • laravel使用protobuf扩展

    2021-01-13 11:47:38
    看此篇文章之前,一定要确保,自己的开发环境或者生产环境已经安装好 protoc 的扩展,如果没有安装,建议先学习一下。 PHP使用protobuf(windows下):https://blog.csdn.net/wplblog/article/details/112537824 php...
  • windows上安装protobuf

    万次阅读 2015-11-16 21:08:31
     最近因为项目的需求,需要接触Protobuf,在官方提供的压缩包中,提供了Linux下的编译脚本,但是,由于项目在windows下开发,因此,需要在Windows编译和安装Protobuf,结合自己的探索,希望能够帮助到初次接触
  • 我使用的是最新版本的protobufprotobuf-2.5.0),编程工具使用VS2010。简单介绍下google protobuf: google protobuf 主要...Google protobuf主要是针对Linux下的开发,但是为了照顾windows的开发人员,google也
  • protobuf的简单使用

    2018-02-01 22:19:00
    操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 ...Protobuf是Google开发一种数据描述语言,能够将结构化数据序列化,可用于数据存储、通信协议等方面。 首页:https://developers.google.com/pr...
  • Tars是腾讯从2008年到今天一直在使用的微服务开发框架,2018年成为Linux基金会开源项目,目前支持C++、Java、PHP、NodeJS与Go语言。该框架为用户提供了涉及到开发、运维,以及测试的一整套解决方案,帮助一个产品...
  • 作者丨张勇编辑丨TARS小助手TARS是腾讯从2008年到今天一直在使用的微服务开发框架,2018年成为Linux基金会开源项目目前支持PHP、C++、Java、Nodejs与Go语言。该框架为用户提供了涉及到开发、运维,以及测试的一整套...
  • python基础--protobuf的使用(一)

    万次阅读 2018-07-31 21:36:03
    protobuf2/3语法介绍 protobuf2语法介绍 ...Protobuf(Google Protocol Buffers)是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具库.它和XML和Json数据差不多,把数据已某种形式保存起来.Pro...
  • Linux服务器开发系列】不同阶段的工程师,眼中的即时通讯,竟然如此差异 更多精彩内容包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,P2P,Linux内核,Docker,TCP/IP,协程,DPDK多个...
  • protobuf-wireshark编译小结

    千次阅读 2013-04-18 16:18:33
    一直使用protobuf作为网络开发的私有协议消息通信。但是抓包分析是个问题。幸好目前已经有了支持wireshark的protobuf插件。该插件是基于linux的代码编写的。 1. 首先要先搭建好wireshark编译环境,可以参考官方的...
  • 笔者在windows下做Android开发中遇到了一些需要用到Protobuf nano版本的地方,但是下载到的nano版本默认编译出来的是C版本的代码。 这里我们查看help发现,如果需要编译成Java版本,则需要使用--java_out=OUT_DIR这...
  • Linux下软件开发RPC框架

    千次阅读 2015-11-14 13:46:10
    thrift的全名叫做Apache thrift,是一款软件开发RPC框架,可以很高效地实现跨语言的RPC服务。 thrift最初生于Facebook,并茁壮成长,在2007年由Facebook正式开源出来,2008年由Apache软件基金会开始负责项目孵化...
  • 接着上一篇的继续, 使用go实现一个适用于嵌入式上的存储模块。简单易用,使用简单方便。...如果想要方便记录的解析,可以结合protobuf把数据序列化为字节流存储进去。 以下为按照这个思路的实现的存...
  • linux车机端carlife移植、开发

    千次阅读 热门讨论 2018-03-23 13:22:09
    针对linux平台,百度仅仅提供 carlife通讯库及其源码,其他功能都需要自己开发(android端比较简单,直接提供apk),所以移植carlife到linux车机端,工作量还是比较大的,前后花了一个多月才开发完成。目前aoa通道、...
  • 2. ubuntu下,opencv3.x安装一直downloading这个包,要看超时信息里的下载路径,把它放到下载路径中,比如我的opencv3.2.0源文件路径为/home/han/software/linux_opencv/opencv-3.2.0/,要把protobuf这个tar.gz包放在/...

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
关键字:

linuxprotobuf开发

linux 订阅