llvm-在cpp中定义函数并创建调用
在llvm项目教程中,它们通常有一个骨架文件,其中调用了一个外部函数,而它的主体是在一个c文件中实现的,该文件的.bc将被链接,以获得查找外部函数的结果位代码。 但是,在github中查看已实现的LLVM项目时,我没有看到它们使用任何c文件并将其链接到生成的位代码。 我的问题是如何定义函数并创建对函数的调用。定义内在函数是唯一的方法吗llvm-在cpp中定义函数并创建调用,llvm,Llvm,在llvm项目教程中,它们通常有一个骨架文件,其中调用了一个外部函数,而它的主体是在一个c文件中实现的,该文件的.bc将被链接,以获得查找外部函数的结果位代码。 但是,在github中查看已实现的LLVM项目时,我没有看到它们使用任何c文件并将其链接到生成的位代码。 我的问题是如何定义函数并创建对函数的调用。定义内在函数是唯一的方法吗 在cpp中定义函数并对该函数进行createCall时,在运行位码/或二进制时,它找不到在cpp中定义的函数的定义。我不确定是否正确理解您的问题,但将尝试回答 当
在cpp中定义函数并对该函数进行createCall时,在运行位码/或二进制时,它找不到在cpp中定义的函数的定义。我不确定是否正确理解您的问题,但将尝试回答 当您执行
Function*myF=module->getOrInsertFunction(“myF”,…)代码>您只需为它创建一个声明。很像void myF(…)
要将myF
转换为定义,请创建BasicBlock
s,用指令
s填充它们,然后将这些BasicBlock
插入myF
。这将在您的模块中定义myF
,您将不再看到“未找到定义”错误。谢谢您回复我。为了解决获取“未找到定义”的问题,我必须在一个c文件中实现函数体并链接其生成的bt。然而,这正是我所寻找的。然而,我主要关心的是实现函数LLVM指令是多么容易/合理,而函数本身在用C编写时似乎非常复杂——例如,它使用指针转换、结构、重新解释等。