【问题标题】:llvm- Defining function in cpp and creating a callllvm- 在 cpp 中定义函数并创建调用
【发布时间】:2018-07-12 20:33:15
【问题描述】:

在 llvm 项目教程中,它们通常有一个骨架文件,其中调用了一个外部函数,而它的主体是在一个 c 文件中实现的,其 .bc 将链接到生成的位码以查找外部函数。 但是,查看 github 中实现的 LLVM 项目,我没有看到它们使用任何 c 文件并将其链接到生成的位码。 我的问题是如何定义一个函数并创建对该函数的调用。定义内在函数是唯一的方法吗?

当在 cpp 中定义一个函数,并且对该函数有一个 createCall 时,它在运行 bitcode/或二进制文件时找不到在 cpp 中定义的函数的定义。

【问题讨论】:

    标签: llvm


    【解决方案1】:

    我不确定我是否理解你的问题,但会尝试回答。

    当您执行Function* myF = module->getOrInsertFunction("myF", ...); 时,您只需为其创建一个声明。很像 C/C++ 头文件中的void myF(...);

    要将myF 转换为定义,请创建BasicBlocks,用Instructions 填充它们,然后将这些BasicBlocks 插入myF。这将使 myF defined 在您的模块中,您将不会再看到“未找到定义”错误。

    【讨论】:

    • 感谢您回复我。为了解决“找不到定义”的问题,我不得不在一个 c 文件中实现函数体并链接它生成的 bt。然而,这正是我一直在寻找的。然而,我主要关心的是实现一个函数 LLVM 指令是多么容易/合理,而用 C 语言编写的函数本身似乎非常复杂——例如,它使用指针转换、结构、重新解释等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多