首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将LLVM JIT代码链接到静态LLVM库?

将LLVM JIT代码链接到静态LLVM库?
EN

Stack Overflow用户
提问于 2010-05-11 04:03:52
回答 1查看 3.4K关注 0票数 17

我正在实现一个跨平台(Mac、Windows和Linux)的应用程序,它将对金融数据进行大量CPU密集型分析。出于速度原因,大部分分析引擎将使用C++编写,并使用用户可访问的脚本引擎与C++测试引擎进行交互。随着时间的推移,我想编写几个脚本前端,以模仿现有的大型用户群中的其他流行软件。第一个方面是一种类似VisualBasic的脚本语言。

我认为LLVM将完美地满足我的需求。性能非常重要,因为数据量非常大;运行一次测试可能需要几个小时或几天的时间才能得到答案。我相信,使用LLVM还可以让我使用单一的后端解决方案,同时随着时间的推移,我可以为不同风格的脚本语言实现不同的前端。

测试引擎本身将与接口分离,测试甚至将在单独的过程中进行,并将进度和结果报告给测试管理接口。测试将由与测试引擎代码集成的脚本代码组成。

在我之前编写的一个类似商业测试系统的实现中,我构建了一个快速解释器,它很容易与测试库接口,因为它是用C++编写的,并直接链接到测试引擎库。从脚本代码到测试库对象的回调涉及到格式之间的转换,这会带来很大的开销。

我设想使用LLVM,我可以直接将回调实现到C++中,这样我就可以让脚本代码工作起来,就好像它是用C++编写的一样。同样,如果所有代码都编译为LLVM字节码格式,那么LLVM优化器似乎可以跨越脚本语言和用C++编写的测试引擎代码之间的界限进行优化。

我不想每次都编译测试引擎。理想情况下,我希望只对脚本代码进行JIT编译。对于小的测试,我会跳过一些优化过程,而对于大型的测试,我会在链接期间执行完全的优化。

那么这是可能的吗?是否可以将测试引擎预编译为.o目标文件或.a库文件,然后使用JIT链接脚本代码?

最后,理想情况下,我希望让脚本代码将特定的方法实现为特定C++类的子类。因此,C++测试引擎只能看到C++对象,而JIT设置代码则编译脚本代码,这些脚本代码实现了对象的一些方法。看起来,如果我使用正确的名称损坏算法,那么为脚本语言设置LLVM生成看起来就像一个C++方法调用,然后可以链接到测试引擎中。

因此,链接阶段将在两个方向上进行,从脚本语言到测试引擎对象的调用以检索定价信息和测试状态信息,以及从测试引擎调用某些特定C++对象的方法,其中代码不是从C++而是从脚本语言提供的。

总而言之:

1)能否将预编译( .bc、.o或.a)文件链接为即时编译、代码生成过程的一部分?

2)我是否可以使用上面1)中的过程链接到代码中,这样我就能够创建代码,就好像它都是用C++编写的一样?

EN

回答 1

Stack Overflow用户

发布于 2010-06-21 22:07:39

1)你可以加载和链接.bc文件,如果.o文件已经编译成.so归档文件,那么它们应该是可加载的,并且其中的符号应该能够使用。

2)只要你不想用回调做可怕的事情,你可能只需要传递标准的C函数指针,并通过函数指针进行回调。您还可以做某些其他的事情,但是在不是C++编译器的情况下尝试定义C++对象或模板或者调用成员函数是您不想做的事情。

你必须了解C++ ABI,你必须了解你的目标平台,你必须知道所有的事情,你必须有效地成为一名C++编译器,才能生成看起来像C++的代码。名字mangler是最烦人的部分之一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2806046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档