导航:首页 > 源码编译 > llvm编译器查看

llvm编译器查看

发布时间:2022-06-06 04:46:43

❶ LLVM每日谈之一 LLVM是什么

写在前面的话: 最近接触llvm比较多,在这个上面花了不少的时间。感觉llvm要完全理解透是个很不容易的事情,需要在学习过程中好好的整理下自己的思路。刚好又阅读了开源项目Storm的作者Nathan Marz的博客《You should blog even if you have no readers》,就打开自己的blog,开始了这个llvm每日谈的系列。希望自己能坚持的久一点,多写写llvm的每个方面,多写写自己的理解。 llvm是low level virtual machine的简称,其实是一个编译器框架。llvm随着这个项目的不断的发展,已经无法完全的代表这个项目了,只是这种叫法一直延续下来。 llvm是一个开源的项目。它最早的时候是Illinois的一个研究项目,主要负责人是Chris Lattner,他现在就职于Apple. Apple 目前也是llvm项目的主要赞助者之一。 llvm的主要作用是它可以作为多种语言的后端,它可以提供可编程语言无关的优化和针对很多种CPU的代码生成功能。此外llvm目前已经不仅仅是个编程框架,它目前还包含了很多的子项目,比如最具盛名的clang. llvm的优点是开源,有一个表达形式很好的IR语言,模块化作的特别好。 llvm这个框架目前已经有基于这个框架的大量的工具可以使用。 llvm的官方网站地址是:llvm.org。在这里可以下载最新的发布代码,也可以找到介绍llvm的相关文档。 附录:llvm目前支持的工具(描述来自网络) llvm-as 将人类可读的 .ll 文件汇编成字节代码 llvm-dis 将字节代码文件反编成人类可读的 .ll 文件 opt 在一个字节代码文件上运行一系列的 LLVM 到 LLVM 的优化 llc 为一个字节代码文件生成本机器代码 lli 直接运行使用 JIT 编译器或者解释器编译成字节代码的程序 llvm-link 将几个字节代码文件连接成一个 llvm-ar 打包字节代码文件 llvm-ranlib 为 llvm-ar 打包的文件创建索引 llvm-nm 在 字节代码文件中打印名字和符号类型 llvm-prof 将 'llvmprof.out' raw 数据格式化成人类可读的报告 llvm-ld 带有可装载的运行时优化支持的通用目标连接器 llvm-config 打印出配置时 LLVM 编译选项、库、等等 llvmc 一个通用的可定制的编译器驱动 llvm-diff 比较两个模块的结构 bugpoint 自动案例测试减速器 llvm-extract 从 LLVM 字节代码文件中解压出一个函数 llvm-bcanalyzer 字节代码分析器 (分析二进制编码本身,而不是它代表的程序) FileCheck 灵活的文件验证器,广泛的被测试工具利用 tblgen 目标描述阅读器和生成器 lit LLVM 集成测试器,用于运行测试

❷ llvm是什么

LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。

❸ 比较gcc,llvm和商用编 译器的性能差异,说明是什么原因导致差异 的出现

Apple在LLVM GCC4.2编译器中,通过XCode中的提示接口显式地为程序员提供是否将目标代码编译为ARM的选项。而在Apple LLVM3.0中,此选项没有了。
由于采用ARMv7A架构的Apple A4/A5处理器拥有Thumb-2指令集,使得Thumb代码在确保紧凑性的同时又进一步提升了计算能力。因此,Apple将工程配置默认设置为编译为Thumb代码。
而又由于LLVM的编译选项基本与GCC兼容,因此我们只需要在编译选项中手动加入-marm即可。
而传统GCC的编译选项只有-mthumb,它默认将代码编译为ARM指令集,因此可能没有提供-marm的编译选项。不过-marm在Apple LLVM3.0中确实奏效了。

❹ Gcc和llvm编译器有什么区别,我这配置哪个快

LLVM与GCC在三段式架构上并没有本质区别。LLVM与其它编译器最大的差别是,它不仅仅是Compiler Collection,也是Libraries Collection。举个例子,假如说我要写一个XYZ语言的优化器,我自己实现了PassXYZ算法,用以处理XYZ语言与其它语言差别最大的地方。而LLVM优化器提供的PassA和PassB算法则提供了XYZ语言与其它语言共性的优化算法。那么我可以选择XYZ优化器在链接的时候把LLVM提供的算法链接进来。LLVM不仅仅是编译器,也是一个SDK。

❺ 如何学习 clang和LLVM,需要哪些知识

我最近和Clang/LLVM打交道比较多,目前游离在LLVM IR和IBM WCode之间。对于学习Clang/LLVM来说,其实需要看你做什么,是研究C, C++, Objective-C在Clang的实现,抑或着是想利用Clang做AST层面的事情,还是说想要利用LLVM IR来做

❻ 如何利用LLVM写一个编译器

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

❼ 编译器二:LLVM和GCC的区别

GCC: GNU Compiler Collection
GCC属于传统编译器,传统编译器的工作原理基本上都是三段式的,可以分为前端(Frontend)、优化器(Optimizer)、后端(Backend)。前端负责解析源代码,检查语法错误,并将其翻译为抽象的语法树(Abstract Syntax Tree)。优化器对这一中间代码进行优化,试图使代码更高效。后端则负责将优化器优化后的中间代码转换为目标机器的代码,这一过程后端会最大化的利用目标机器的特殊指令,以提高代码的性能。
事实上,不光静态语言如此,动态语言也符合上面这个模型,例如Java。Java Virtual Machine也利用上面这个模型,将Java代码翻译为Java bytecode。这一模型的好处是,当我们要支持多种语言时,只需要添加多个前端就可以了。当需要支持多种目标机器时,只需要添加多个后端就可以了。对于中间的优化器,我们可以使用通用的中间代码。
这种三段式的结构还有一个好处,开发前端的人只需要知道如何将源代码转换为优化器能够理解的中间代码就可以了,他不需要知道优化器的工作原理,也不需要了解目标机器的知识。这大大降低了编译器的开发难度,使更多的开发人员可以参与进来。
虽然这种三段式的编译器有很多有点,并且被写到了教科书上,但是在实际中这一结构却从来没有被完美实现过。做的比较好的应该属Java和.NET虚拟机。虚拟机可以将目标语言翻译为bytecode,所以理论上讲我们可以将任何语言翻译为bytecode,然后输入虚拟机中运行。但是这一动态语言的模型并不太适合C语言,所以硬将C语言翻译为bytecode并实现垃圾回收机制的效率是非常低的。
GCC也将三段式做的比较好,并且实现了很多前端,支持了很多语言。但是上述这些编译器的致命缺陷是,他们是一个完整的可执行文件,没有给其它语言的开发者提供代码重用的接口。即使GCC是开源的,但是源代码重用的难度也比较大。
LLVM: Low Level Virtual Machine
LLVM最初是[Low Level Virtual Machine]的缩写,定位是一个虚拟机,但是是比较底层的虚拟机。它的出现正是为了解决编译器代码重用的问题,LLVM一上来就站在比较高的角度,制定了LLVM IR这一中间代码表示语言。LLVM IR充分考虑了各种应用场景,例如在IDE中调用LLVM进行实时的代码语法检查,对静态语言、动态语言的编译、优化等。
LLVM与GCC在三段式架构上并没有本质区别。LLVM与其它编译器最大的差别是,它不仅仅是Compiler Collection,也是Libraries Collection。举个例子,假如说我要写一个XYZ语言的优化器,我自己实现了PassXYZ算法,用以处理XYZ语言与其它语言差别最大的地方。而LLVM优化器提供的PassA和PassB算法则提供了XYZ语言与其它语言共性的优化算法。那么我可以选择XYZ优化器在链接的时候把LLVM提供的算法链接进来。LLVM不仅仅是编译器,也是一个SDK。

❽ xcode里面有llvm clang编译器吗

Xcode 中最开始使用的是 GCC,后来开始引入 LLVM 后端(前端仍然是 GCC),再后来引入 Clang 前端,再后来 Clang/LLVM 成为默认,然后从 Xcode 5.0 版本以后,Clang/LLVM 是唯一提供的编译器套件。

❾ 怎么告诉编译器去找llvm/support/host.h

首先是编译,然后是链接。
编译器会将所有.cpp文件编译成中间文件.o,编译时遇到.h文件则读入各种(函数,变量等)的声明,此时并不读入对应的.cpp文件。
链接时会将各个.o文件连接成可执行文件。
所以,编译器并不是看到.h文件后立即自动去找同名的.cpp文件,而是将所有的.cpp文件编译成.o文件后一并链接。

❿ llvm 利用g++编译程序,此程序inclue了llvm的一些头文件。编译时出现 undefined reference to错误

你是要编译llvm和你自己在llvm上做的工程?llvm能用gnu工具链编译的,你的配置有问题,编译,链接脚本的顺序有问题。这跟是不是第三方库没关系

阅读全文

与llvm编译器查看相关的资料

热点内容
手游我的世界租的服务器怎么添加mod 浏览:552
java中的Ascii 浏览:497
php白盒测试工具 浏览:574
男人命令女人 浏览:166
全球编程语言排名 浏览:785
某百度程序员中午面试 浏览:614
程序员刘亦菲的样子 浏览:303
java获取服务器的时间格式 浏览:69
什么是java中的多态 浏览:330
html包含php文件 浏览:359
程序员睡觉少感觉不到困 浏览:921
空调压缩机工作电压 浏览:202
梦幻西游浙江二区服务器云主机 浏览:250
什么样的人才叫程序员 浏览:125
ipad如何解压缩文件下载 浏览:225
知网程序员 浏览:706
怎么把电子版投标报价加密 浏览:33
电脑安全编译器 浏览:369
在服务器里如何调创造 浏览:839
知云登录为什么找不到服务器 浏览:819