首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将LLVM getOrInsertFunction链接到LLVM传递中的外部c++函数。

将LLVM getOrInsertFunction链接到LLVM传递中的外部c++函数。
EN

Stack Overflow用户
提问于 2022-03-29 00:46:40
回答 1查看 228关注 0票数 1

我编写了一个LLVM传递,它将对外部函数(foo)的调用插入到C(count.c)文件中。稍后,当我将包含C函数的foo文件的对象与LLVM工具化的c++文件链接时,它工作得很好。包含foo函数的C文件如下所示。

代码语言:javascript
运行
复制
#include <stdio.h>
int count = 0;

void foo(int id) {
    count++;
    printf("id = $d,  count = %d\n", id, count);
}

我使用以下代码片段从LLVM pass创建一个调用:

代码语言:javascript
运行
复制
ArrayRef<Type *> paramTypes = {Type::getInt8Ty(Ctx)};
Type *retType = Type::getVoidTy(Ctx);
FunctionType *funcType = FunctionType::get(retType, paramTypes, false);

FunctionCallee callee = M.getOrInsertFunction("foo", funcType);

只要foo函数在C文件中,所有这些都能很好地工作。但是,如果foo位于C++文件中,则ld返回undefined references to 'foo'

是否有方法将C++文件中的外部函数链接到llvm getOrInsertFunction

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-29 02:06:19

是的,您需要将C++函数设置为extern

foo.cpp可以看起来像:

代码语言:javascript
运行
复制
extern "C" {

void foo(int id) {
    count++;
    printf("id = $d,  count = %d\n", id, count);
}

}

extern C告诉编译器不要损坏作用域函数的名称。您可以了解更多关于名称损坏和外挂C here的信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71655233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档