我有点困惑。我正在尝试使用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等?