我正在使用Python的LLVM bindings为自定义语言生成代码。
现在我想运行程序并检查它们的输出是否正常 - 但我无法确切地知道如何输出。
有没有办法使用LLVM绑定写入stdout
或文件?
或者我是否需要从C库中调用printf
?
我如何做其中任何一个?
注意:我没有使用JIT / ExecutionEngine,因此LLVM不会自动找到printf
函数。
答案 0 :(得分:1)
LLVM可以生成一个目标文件(.o
),只要您正确定义并链接到printf()
(或glibc
,该文件应该能够链接到msvcrt
如果你在Windows上)。他们似乎还有一个名为llvm_cbuilder
的库,作为llvmpy
的一部分,可以帮助您做到这一点。他们甚至只有printf()
的测试用例:
https://github.com/llvmpy/llvmpy/blob/master/llvm_cbuilder/tests/test_print.py
另一种选择是拥有自己的实用功能套件,包括一些打印功能。然后,您可以将指针传递给一个表,该表将所有这些指针保存到生成的函数中。我喜欢这个解决方案的是它允许你在运行时加载生成的函数并避免真正的链接(但你必须考虑重定位)。
最后但同样重要的是,Numba始终是llvmpy示例的良好来源。