【问题标题】:produce binarycode from IR generate from llvmlite从 IR 生成二进制代码 从 llvmlite 生成
【发布时间】:2017-06-22 21:35:38
【问题描述】:

有谁知道是否可以使用 llvmlite 生成来自 IR 的二进制代码?在 llvm 中,我们可以简单地 clang -emit-llvm -o foo.bc -c foo.c。如果我使用 llvmlite 怎么办?

【问题讨论】:

    标签: llvmlite


    【解决方案1】:

    据我所知,llvmlite 不包含链接器。您可以编写目标代码,例如,

    target = llvm.Target.from_default_triple()
    machine = target.create_target_machine()
    with llvm.create_mcjit_compiler(module, target) as mcjit:
         def on_compiled(module, objbytes):
             open('mymodule.o', 'w').write(objbytes)
         mcjit.set_object_cache(on_compiled, lambda m: None)
         mcjit.finalize_object()
    

    然后使用您的标准链接器ld,通常您可以通过gccclang 链接目标文件。 LLVM 4 似乎附带了自己的链接器 lld,这是一个手动使用的选项,但 llvmlite 不在版本 4 上,因此无法公开该功能。

    例如在我的机器上,我可以从bash运行

     $ gcc -o llvmapp mymodule.o
     $ ./llvmapp
    

    【讨论】:

      【解决方案2】:

      到目前为止,似乎最简单的解决方案是直接在 python 中编写所有代码,但这是以运行时间为代价的,我知道有些人并不关心这一点。

      不幸的是,我不得不同意@Jimmy。我还没有看到任何东西,现在是 2019 年,已经 2 年了,仍然什么都没有。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 2017-07-19
        • 2012-04-07
        • 2020-11-11
        • 1970-01-01
        • 2015-02-05
        相关资源
        最近更新 更多