我正在搜索一个C或C ++库,它可以在运行时动态地加载和链接obj文件(如果ELF或obj不重要)。我花了一些时间寻找这样的图书馆,但我的成绩并不成功。
我尝试了什么:
LLVM : 目前我最好的解决方案我使用Clang以LLVM的字节码格式生成.obj文件,并使用其JIT函数动态加载和执行该函数。但是,LLVM非常庞大,我家中的PC无法为JIT编译完整的LLVM。此外,我遇到了重定位溢出或未实现重定位类型的一些问题。
libjit : 我读过,它可以加载.elf文件并将它们链接起来。但遗憾的是,我无法为Windows编译它,所以我无法尝试。
Nanojit和NativeJit : 看起来他们不支持JITting目标文件。
那么......我该怎么办?我是否必须坚持使用LLVM?还有其他选择吗?
答案 0 :(得分:0)
我想可以类推为第一种方法的方法是,.bc
与.o
(或.obj
)文件相似,因为它只是C ++代码是一种中间语言,它可以包含对未定义函数的引用,以在库中进行搜索。
从某种意义上说,JIT-ted代码类似于DLL,它将动态链接到将在其中运行的可执行文件。
您无需编译LLVM -您可以从LLVM Download Page下载LLVM的二进制文件和各种实用程序(例如clang
)