使用llvm-hs-pure时,如何获取函数指针用于LLVM函数调用?
问题解答
完全可以通过GlobalReference手动构造已存在函数的指针,这是正确且推荐的做法,尤其适合你这种目标函数已在其他模块定义、后续会被链接进来的场景。
具体操作要点
- 先明确目标函数的LLVM函数类型(比如
FunctionType实例),再推导对应的指针类型(用pointerType函数,传入目标函数类型即可生成)。 - 调用
GlobalReference,传入生成的指针类型和目标函数名称,就能得到可直接用于call指令的函数指针Operand。
示例代码(贴合你的ModuleBuilder上下文)
-- 假设目标函数类型:接收两个i32参数,返回i32 let funcTy = functionType i32Type [i32Type, i32Type] funcPtrTy = pointerType funcTy funcPtr = GlobalReference funcPtrTy "somename" -- 直接用funcPtr生成call指令 call funcPtr [arg1, arg2]
合理性说明
- LLVM链接器在模块合并时,会自动将这个
GlobalReference解析到已存在的函数定义上,不会产生重复定义问题。 - 相比
lift (function ...)的方式,这种做法不会在当前模块生成冗余的函数定义,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

