LLVM外部函数

时间:2010-07-03 19:03:27

标签: compiler-construction llvm extern

我最近开始在MinGW下试用LLVM。我已经阅读了Kaleidoscope教程,但现在我遇到了外部函数问题。

我正在声明这样的外部函数:

const Type* doubleType = Type::getPrimitiveType(ctx, Type::DoubleTyID);
std::vector<const Type*> doubleParams;
doubleParams.push_back(doubleType);
FunctionType* doubleDouble = FunctionType::get(doubleType, doubleParams, false);
Function* SinFunction = Function::Create(doubleDouble, Function::ExternalLinkage, "sin", mod);

其中mod是Module *,ctx是LLVMContext&amp;。

在这种情况下,一切正常。 但是,如果我声明一个函数:

extern "C"
double my_cubic_transform(double x) {
    return x*x*x;
}

将SinFunction声明从使用“sin”改为使用“my_cubic_transform”(不改变任何其他内容),然后我得到:

LLVM ERROR: Program used external function 'my_cubic_transform' which could not be resolved

更改我的makefile以包含“-g”选项无效。 Kaleidoscope教程建议在LLVM中这是可能的(至少对于我正在使用的JIT)。我做错了什么?如果是这样,是什么?

1 个答案:

答案 0 :(得分:4)

没关系,我明白了。

事实证明,即使我使用的是可执行文件(exe)而不是dll,我也必须使用__declspec(dllexport)声明my_cubic_transform。

编写本教程的人必须使用其他平台,其中__declspec不存在,因此没有发现此问题。