我用Python编写编译器,使用llvmlite
生成中间llvmir。Lexer和parser已经完成,现在我正在生成代码。编译器是动态的和弱类型的,所以我需要在运行时做一些事情,比如分配。为此,我已经用C实现了一些函数,现在我想用llvmlite中的builder.call
调用这些函数。在
我没有找到文档或例子来说明如何做到这一点。在
这个函数只是一个简单的例子,实际的要大得多。在
C:
int some_function(int a)
{
return a + 4;
}
Python:
^{pr2}$我可以直接使用llvmlite构建器来编写函数,但是用C编写会非常快速、干净和容易。欢迎任何帮助!在
您可以导入包含运行库的动态库。在
然后您可以简单地生成正常的函数调用。在
@Coder3000和@Ismail Badawi的答案是完美的,但是没有密码。在那里是我的密码
以及测试库.cpp $referencehttps://helloacm.com/calling-c-shared-library-from-python-code-linux-version/
关于这个问题,另一个参考文献
-Call C/C++ functions from the ExecutionEngine -Call Python code from LLVM JIT -http://eli.thegreenplace.net/2015/calling-back-into-python-from-llvmlite-jited-code/
在llvmir端,您只需声明具有正确签名的函数(无正文),并像任何其他函数一样插入对它们的调用。这就像在C中调用在另一个文件中定义的函数一样。在
从那以后,你就不得不以某种方式链接到你的C函数上。这里的细节取决于您打算如何使用生成的IR代码。例如,您可以使用clang将其转换为目标文件,然后像任何其他程序一样链接它。或者可以使用llvmjit,在这种情况下,@Coder3000的答案(
llvmlite.binding.load_library_permanently
)应该可以让llvm解析函数调用。在相关问题 更多 >
编程相关推荐