我编写了一个LLVM传递,它将对外部函数(foo
)的调用插入到C
(count.c)文件中。稍后,当我将包含C
函数的foo
文件的对象与LLVM工具化的c++文件链接时,它工作得很好。包含foo函数的C文件如下所示。
#include <stdio.h>
int count = 0;
void foo(int id) {
count++;
printf("id = $d, count = %d\n", id, count);
}
我使用以下代码片段从LLVM pass创建一个调用:
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
发布于 2022-03-29 02:06:19
是的,您需要将C++函数设置为extern
。
foo.cpp可以看起来像:
extern "C" {
void foo(int id) {
count++;
printf("id = $d, count = %d\n", id, count);
}
}
extern
C告诉编译器不要损坏作用域函数的名称。您可以了解更多关于名称损坏和外挂C here的信息。
https://stackoverflow.com/questions/71655233
复制相似问题