linux protobuf静态库,Windows下Protobuf的静态库编译和使用说明(验证成功)-Go语言中文社区...

18722a34e836fa668ee17ba7023fcde4.png

c790d96f7bdccaaeb2af334ab2813e2d.png

打开cmake

cf542d40a5bfb9cf42af1eadc231eaa1.png

1.你下载的protubuf目录中的cmake目录

2.protubuf编译后的目录

然后点configure

e8330654a5c0247e32dcd71a847b3235.png

会自动检测出你的vs,一切默认就好,然后点 finish

633a2bbc19ed1f5ceeefb97b61d4cdf3.png

然后点击Generate,如果成功,进入编译好的目录

e5a63dc66341dbaa8af37888a6882dd4.png

用vs打开这个项目

2b927fc96fbd67e8a842cc35e89b2ad1.png

我只用到了libprotobuf和protoc,如果到时候缺少库,再编译一下libprotoc吧(网上很多人用了)

然后编译这两个文件夹

508f87f72165b8cab416323cacc766f5.png

编译到目前为止就结束了,现在来说怎么使用

首先建立一个vs工程,把上面的libprotobufd.lib和proto.exe拷贝到vs工程中

自己再写一个简单的protobuf文件

75cc940715b46e8706f7d2a2ee1f3dfa.png

f212758db53607efb0225e5cea745239.png

f4f885e217bd022526d9e347b451f9cb.png

把生成的.h和.cc文件copy到源文件目录,再手动添加到项目中

3f9429a86761cac2af523b4cba9f9301.png

最重要的来了,自己被整到死的几个关键步骤

dab7ac4ceb2047d182cb1248b183836e.png

e136415dae9299581a5a4e26f592433c.png

faeb94b28db8417acb5b6e12c5100d48.png

491520d5c33b6ee1a4df7f9b94b1e568.png

如果有多个.lib用 ; 隔开

还需要把protobuf/src/google拷贝过来

02ef8f82fa0f27c5e2954b4f31b5415f.png

e2db100f90250857b61c42dd20969103.png

终于可以运行了,满满的泪,你们肯定不知道为此我花了多久时间,心酸历

8674d2a0b74f6d0a8e2c6431eb8fade9.png

1、下载protobuf

选择protoc-xxx-win32.zip下载

2、配置环境变量

将解压出来的protoc.exe放在一全英文路径下,并把其路径名放在windows环境变量下的path下。

dd196617dfb91c927ba35e42cbe200fc.png

放在系统环境变量下和用户环境变量下都是可以的,这里放在了用户环境变量下。

32c9024b37ba3570e6b8eaee283e8dbd.png注:简单粗爆的放在C:WindowsSystem32下面也是可以运行的。

3、生成代码

在所使用的proto文件路径下打开cmd窗口执行以下命令:protoc -I=源地址 --java_out=目标地址 源地址/xxx.proto1

此处生成时会以 proto 里面注明的java_package为路径完整生成,所以目标地址不必包含java_package及之后的路径,比如:option java_package = "com.test.protocol";,那么就会生成com/test/protocol/XXX.java

参数解释:

-I:主要用于指定待编译的 .proto 消息定义文件所在的目录,即可能出现的包含文件的路径,该选项可以被同时指定多个。此处指定的路径不能为空,如果是当前目录,直接使用.,如果是子目录,直接使用子目录相对径,如:foo/bar/baz,如果要编译的文件指定的文件路径为baz/test.proto,那么应这么写-I=foo/bar,而不要一直写到baz。

4、示例

使用的文件:

SubscribeReq.proto(在 D:test_protoc 下)syntax = "proto2";

option java_package="com.nio.serlizable";

option java_outer_classname="SubscribeReqProto";

message SubscribeReq{

required int32 subReqId = 1;

required string userName = 2;

required string productName = 3;

repeated string address = 4;

}1

2

3

4

5

6

7

8

9

10

生成:D:>protoc -I=D:test_protoc --java_out=D:test_protoc SubscribeReq.proto1

生成后:

ed8e99df347f088255d9d61f2690f18c.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值