从llvmlite

时间:2017-06-22 21:35:39

标签: llvmlite

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

2 个答案:

答案 0 :(得分:0)

据我所知,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

答案 1 :(得分:0)

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

不幸的是,我必须同意@Jimmy。我还什么都没看,是2年后的2019年,仍然一无所获。