2

我们一直在使用协议缓冲区,并且正在使用 protoc 生成 c++ 和 python 文件,以及使用 protobuf-csharp-port 生成 c# 文件。目前这些都是分开完成的,来自linux的c++和python以及来自windows的c#。我们想让一个脚本生成所有这些,在 linux 中运行。

为此,我尝试使用单声道运行 ProtoGen.exe,但它没有产生任何输出。以下命令运行,但不产生 cs 文件,也没有错误。

mono ../cs/Packages/Google.ProtocolBuffers/tools/ProtoGen.exe --protoc_dir=/usr/local/bin/ ./subdir/simple_types.proto

我有一种感觉,我错过了一些简单的东西。

4

2 回答 2

5

我认为我没有尝试在 Linux 上从 ProtoGen.exe 运行 protoc。我很惊讶它没有任何错误,但我们绝对可以调查一下。(如果您想提出问题,那将非常有帮助 - 或者我会在有机会时这样做。)

目前,我建议您先运行 protoc,--descriptor_set_out用于生成 .proto 文件的二进制 (protobuf) 版本。这就是 ProtoGen.exe 首先尝试做的事情,但听上去失败了。

一旦你获得了消息描述符的二进制版本(我称之为 simple_types.pb),你就可以在上面运行 ProtoGen.exe。自从我这样做以来已经有一段时间了,但我相信你应该能够运行

mono ../cs/Packages/Google.ProtocolBuffers/tools/ProtoGen.exe ./subdir/simple_types.pb

...它应该神奇地工作。

作为一个可怕的选择,您可以尝试在二进制目录中进行protoc.exe符号链接。protoc从根本上说,我怀疑这是出了什么问题:)

于 2013-01-31T07:09:26.190 回答
0

我的脚本

protoc "--proto_path=$SRC_DIR" "--descriptor_set_out=x.protobin" --include_imports $SRC_DIR/x.proto
mono $PRJ_HOME/Google.ProtocolBuffers.2.4.1.521/tools/ProtoGen.exe -line_break=Unix x.protobin

protoc 和 mono 是通过 distrib 包管理器安装的:

# archlinux
pacman -S protobuf mono
于 2014-03-05T09:58:17.060 回答