python - 如何从 Python 的 LLVM 绑定(bind)中写入输出?

标签 python c printf llvm llvm-py

我正在使用 Python 的 LLVM bindings为自定义语言生成代码。

现在我想运行程序并检查它们的输出是否正常工作 - 但我无法弄清楚如何输出任何东西。

有没有什么方法可以使用 LLVM 绑定(bind)写入 stdout 或文件?

或者我需要从 C 库中调用 printf 吗?

我该怎么做其中之一?

注意:我没有使用 JIT/ExecutionEngine,所以 LLVM 不会自动找到 printf 函数。

最佳答案

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 示例的良好来源。

关于python - 如何从 Python 的 LLVM 绑定(bind)中写入输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18175274/

相关文章:

python - 仅在 matplotlib 中水平线在一侧到无穷远

c - 两个线程中的同步问题共享一个队列以使用临界区进行读写

收集 BST 的所有叶子并列出它们

sql - 在 R 脚本中使用 R 变量的 where 子句以在 SQL 语句中使用它

c - ntohl 在 sin_port 上使用并得到负数

python - 如何使用 Pexpect 监控 SSH 隧道的运行状况?

python - Sqlalchemy 真实总和

python - 时间序列数据的滑动窗口

c - 使用||运算符(operator)

python - 在 Windows 上模拟 Linux 的浮点字符串转换行为