【问题标题】:LLVM extern functionsLLVM 外部函数
【发布时间】:2010-07-03 19:03:27
【问题描述】:

我最近开始在 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&。

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

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)。那我做错了吗?如果有,是什么?

【问题讨论】:

    标签: compiler-construction llvm extern


    【解决方案1】:

    没关系,我想通了。

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

    编写本教程的人一定使用了其他不存在 __declspec 的平台,因此没有发现这个问题。

    【讨论】:

    • 是的,可能是windows以外的任何平台:)
    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多