在C / C ++(JIT)中运行时加载和链接obj文件

时间:2017-10-04 19:56:08

标签: c++ c llvm jit

我正在搜索一个C或C ++库,它可以在运行时动态地加载和链接obj文件(如果ELF或obj不重要)。我花了一些时间寻找这样的图书馆,但我的成绩并不成功。

我尝试了什么:

LLVM : 目前我最好的解决方案我使用Clang以LLVM的字节码格式生成.obj文件,并使用其JIT函数动态加载和执行该函数。但是,LLVM非常庞大,我家中的PC无法为JIT编译完整的LLVM。此外,我遇到了重定位溢出或未实现重定位类型的一些问题。

libjit : 我读过,它可以加载.elf文件并将它们链接起来。但遗憾的是,我无法为Windows编译它,所以我无法尝试。

Nanojit和NativeJit : 看起来他们不支持JITting目标文件。

那么......我该怎么办?我是否必须坚持使用LLVM?还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

我想可以类推为第一种方法的方法是,.bc.o(或.obj)文件相似,因为它只是C ++代码是一种中间语言,它可以包含对未定义函数的引用,以在库中进行搜索。

从某种意义上说,JIT-ted代码类似于DLL,它将动态链接到将在其中运行的可执行文件。

您无需编译LLVM -您可以从LLVM Download Page下载LLVM的二进制文件和各种实用程序(例如clang