代码之家  ›  专栏  ›  技术社区  ›  luiscubal

LLVM外部函数

  •  1
  • luiscubal  · 技术社区  · 14 年前

    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);
    

    在这种情况下,一切正常。

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

    将SinFunction声明从使用“sin”改为使用“my\u cubic\u transform”(不做任何更改),然后得到:

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

    将makefile更改为包含“-g”选项无效。 万花筒教程建议在LLVM中实现这一点(至少对于我正在使用的JIT是这样)。我做错什么了吗?如果是,什么?

    1 回复  |  直到 14 年前
        1
  •  5
  •   luiscubal    14 年前

    没关系,我想出来了。

    结果是,即使我使用的是可执行文件(exe)而不是dll,我也必须用declspec(dllexport)声明我的\u cubic\u转换。

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