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