我使用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示例的一个很好的来源。

07-24 17:41