我正在研究用C ++编写的高性能系统。该过程需要能够在运行时理解一些使用为此应用程序开发的简单语言编写的复杂逻辑(规则)。我们有两种选择:
解释逻辑 - 运行嵌入式解释器并生成动态函数调用,当接收数据时,基于解释逻辑处理数据
将逻辑编译成plugin.so动态共享文件,使用dlopen,dlsym加载插件并在运行时调用逻辑函数
选项2看起来非常有吸引力,因为它将是优化的机器代码,在运行过程中运行速度比嵌入式解释器快得多。
我正在探索的选项是:
如果我是正确的,LLVM IR将转换为LLVM字节代码或汇编代码。然后使用LLVM JIT在JIT模式下运行或使用GNU Assembler用于生成本机代码。
是否有可能在LLVM中找到一个功能呢?如果它是从代码中完成的,而不是使用来自C ++的系统命令来调用“as”来生成我的需求的plugin.so文件,那将会更好。
如果您知道我可以在运行时从我的进程生成共享库本机二进制代码的任何方法,请通知我。
答案 0 :(得分:3)
llc这是一个llvm工具,它将LLVM-IR用于二进制代码转换。我认为这就是你所需要的一切。
基本上,您可以按照自己的方式生成LLVM IR,然后通过IR调用llc。
您可以从命令行调用它,或者您可以转到llc的实现,并了解它如何在您自己的程序中执行此操作。
这是一个有用的链接:
http://llvm.org/docs/CommandGuide/llc.html
我希望它有所帮助。