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