如何通过LLVM使用具有虚函数的类来JIT c ++代码?

时间:2016-10-21 16:25:20

标签: c++ clang llvm jit

我有点困惑。我正在尝试使用LLVM和CLANG来运行这个原始的C ++代码:

class Test {
    int _v;
public:
    Test() : _v(0) { }
    ~Test() { }
    void Set(int v) {
        _v = v;
    }
    int Get() {
        return _v;
    }
};

extern "C" Test* CreateTest() {
    return new Test;
}

extern "C" void DestroyTest(Test** o) {
        delete *o;
        *o = 0;
}

由于 clang :: CompilerInstance 调用,我得到了 llvm :: Module 。当我将该模块传递给 llvm :: ExecutionEngine 时,我可以获得指向“ CreateTest ”和“ DestroyTest ”例程的正确指针,一切正常

但是,如果我在我的课程规范中制作“ Test :: Set ”和“ Test :: Get 虚拟,那么< em> llvm :: ExecutionEngine :: getFunctionAddress()在 RuntimeDyldImpl :: ResolveExternalSymbols()中失败。

它会报告致命错误,例如“程序使用的外部函数?? _ 7type_info @@ 6B @无法解析”,并终止我的主机进程。

如何解决链接问题?

顺便说一句,是否有任何链接技巧可以从jit代码调用libc函数,如malloc,printf等?

0 个答案:

没有答案