发布网友 发布时间:2022-04-27 06:03
共2个回答
热心网友 时间:2022-06-27 08:03
LLVM有自己的教程,如果你只想做个玩具,那可以首先试着实现LLVM Tutorial: Table of Contents的Kaleidoscope。深入的,请看他的文档http://llvm.org/docs/
Kaleidoscope是一个范式简单的脚本语言,教程里的词法,语法分析都是手写的,基本流程就是词法语法解析,利用LLVM的API生成中间代码并执行。
我用visual studio编译的LLVM(version 3.6)实现过Kaleidoscope,我遇到的坑不少,如果你想以visual studio编译的LLVM实现Kaleidoscope,你可能同样会遇到
1. LLVM的生成目标对象为ELF格式,在windows下使用JIT的API时会出现incompatible object format的错误警告,需要在通过重新设定Mole的triple,我的PC的getTargetTriple的结果是“i686-pc-windows-msvc”,直接在后面再加上“-elf”即可
TheMole->setTargetTriple("i686-pc-windows-msvc-elf");
2. LLVM不支持windows下通过动态链接导出函数,如果需要使用C/C++的函数,需要通过addSymbol进行注册
llvm::sys::DynamicLibrary::AddSymbol(/*std::string("_") +*/ "printd", &printd);
3. Kaleidoscope里使用的JIT的查找函数的API,getPointerToFunction已经被弃用了,需要替换为getFunctionAddress
热心网友 时间:2022-06-27 08:03
LLVM并非仅仅是一款编译器这么简单。利用LLVM,我们可以进行各种疯狂的操作,比如开发一门新的编程语言、一款新的编译器等等。除了上述应用,也有很多开发中较实用的场景,比如开发编译器插件(用于代码规范检查、代码优化、二进制瘦身)。LLVM从来都不是iOS开发领域专有的,是值得每一位IT开发者学习和研究的神器。