【问题标题】:How to generate a C++ header with Apache Avro (python script)如何使用 Apache Avro(python 脚本)生成 C++ 标头
【发布时间】:2011-10-21 02:29:21
【问题描述】:

我有兴趣使用 Apache Avro 的代码生成工具(即 python 脚本)生成 C++ 标头。 According to the documentation 应该很容易做到,但我通常不使用python,所以对我来说看起来有点奇怪。

说明状态:

生成代码分为两步:

precompile < imaginary > imaginary.flat

预编译步骤将架构转换为代码生成器使用的中间格式。这个中间文件只是模式的基于文本的表示,通过模式类型的树结构的深度优先遍历来展平。

python scripts/gen-cppcode.py --input=example.flat --output=example.hh –-namespace=Math

这告诉代码生成器读取您的扁平化架构作为其输入,并在 example.hh 中生成一个 C++ 头文件。可选参数命名空间会将对象放在该命名空间中...

我的问题(不,我不能去看医生或使用面霜):

我没有看到任何详细解释如何预编译的内容。文档看起来好像我只是在命令提示符下键入“预编译”并提供命令行参数,那么事情就会神奇地工作,但预编译不是有效的 Windows 命令。 那么在 Windows 上预编译的正确方法是什么?如果有人知道怎么做,请告诉我!

我也尝试运行gen-cppcode.py 脚本,但它在第 316 行出现错误(我怀疑这可能是因为我没有预编译架构):

def doEnum(args):
    structDef = enumTemplate;
    typename = args[1]
    structDef = structDef.replace('$name$', typename)
    end = False
    symbols = '';
    firstsymbol = '';
    while not end:
        line = getNextLine()
        if line[0] == 'end': end = True
        elif line[0] == 'name':
            if symbols== '' :
                firstsymbol = line[1]
            else :
                symbols += ', '
            symbols += line[1]
        else: print "error" // <-- Syntax Error: invalid syntax
    structDef = structDef.replace('$enumsymbols$', symbols);
    structDef = structDef.replace('$firstsymbol$', firstsymbol);
    addStruct(typename, structDef)
    return (typename,typename)

【问题讨论】:

    标签: c++ python schema precompile avro


    【解决方案1】:

    我认为这样做的唯一方法是:

    1. 下载 VirtualBox。
    2. 安装 Ubuntu(或其他发行版)。
    3. 下载 Avro。
    4. 安装 cmake。
    5. 安装 C++ 编译器(构建必不可少)。
    6. 安装 boost、flex、bison (sudo apt-get install boost flex bison);顺便说一句,您将特别需要这些 boost 库:
      -- 正则表达式
      -- 文件系统
      -- 系统
      -- 程序选项
    7. 构建 Avro:

      $ tar xf avro-cpp-1.5.1.tar.gz
      $ cd avro-cpp-1.5.1
      $ cmake -G "Unix Makefiles"
      $ make -j3
      $ build/precompile file.input file.flatoutput

    您现在可以生成一个头文件(仍在 VM 的终端窗口中):

    python 脚本/gen-cppcode.py --input=example.flat --output=example.hh

    请注意,即使您生成了 C++ 文件,您仍然无法在 Windows 中使用它进行构建(即使您对 avro-cpp-1.5.1/api 有正确的依赖项。Avro 依赖于 GNU库(例如 sys/uio.h),我还不确定如何专门解决它们。

    【讨论】:

      【解决方案2】:

      我发现运行gen-cppcode.py需要python version 2

      https://www.python.org/downloads/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-10
        • 1970-01-01
        • 2020-11-26
        • 1970-01-01
        相关资源
        最近更新 更多