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