LLVM之clang
参考网站:LLVM系统入门
1 准备
1.1 编写一个c文件,命名为hello.c。
1.2 修改环境变量PATH
(1)vim /etc/profile
(2)添加 export PATH=/root/ollvm/obfuscator-llvm-4.0/build/bin/:$PATH
(3)source /etc/profile
这样可以直接使用clang命令,而无需指定其位置。
2 编译为本机可执行文件
clang hello.c -o hello
文件类型为ELF。
3 编译c文件
可以得到两种格式的IR
(1) 将c文件编译为 LLVM bitcode文件
clang -emit-llvm hello.c -c -o hello.bc
其中.bc格式是llvm的字节码的二进制形式。需要使用llvm-dis来查看,将LLVM位代码转换为人类可读的LLVM程序集。
llvm-dis < hello.bc | less
(2) 将c文件编译为.ll格式
clang -emit-llvm hello.c -S -o hello.ll
其中.ll格式是llvm字节码的文本形式,可以直接使用文本编辑器查看
4 执行
./hello
或者
lli hello.bc
lli是LLVM解释器,它可以直接执行LLVM bitcode文件
5 生成本机程序集
llc是LLVM后端编译器,它将LLVM bitcode转换为本机代码程序文件。
llc hello.bc -o hello.s
hello.s文件类型为ASCII text。
6 将本机程序集组装到程序中
gcc hello.s -o hello.native
7 执行本机代码程序
./hello.native
LLVM之clang相关推荐
- LLVM与Clang编译图例
LLVM与Clang编译图例 参考链接: https://blog.csdn.net/u012874859/article/details/108530256
- LLVM与Clang局部架构与语法分析
LLVM与Clang局部架构与语法分析 Clang与LLVM LLVM整体架构,前端用的是clang,广义的LLVM是指整个LLVM架构,一般狭义的LLVM指的是LLVM后端(包含代码优化和目标代码生 ...
- LLVM 与 Clang 介绍 — LinuxTOY
LLVM 与 Clang 介绍 - LinuxTOY LLVM 是 Low Level Virtual Machine 的简称,这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化.链接优化. ...
- llvm安装方式_安装 LLVM 和 Clang
LLVM 是伊利诺伊大学的一个开源项目,LLVM 提供了完整的 C/C++工具链,Clang 属于其中的一个子项目,是 LLVM 原生的 " C/C++/Objective-C" ...
- 转:GCC,LLVM,Clang编译器对比
GCC,LLVM,Clang编译器对比 转自: http://www.cnblogs.com/qoakzmxncb/archive/2013/04/18/3029105.html 在XCode中,我们 ...
- LLVM 与 Clang 介绍
晚上听国软徐纪元学弟给我说起了他刚装上的 Mac Lion 操作系统,也说到了最近 Apple 推出的新版本的 Xcode 4.2 在 iOS 4.iOS 5 程序开发中,加入了 automatic ...
- 什么事LLVM和Clang?Clang与GCC有什么区别?Clang如何使用?
这个问题主要讲Xcode编译器的认知,在学习iOS之前有必要学习一下Objective-C的编译环境. 在了解LLVM和Clang之前,先得了解一下什么是编译器. 编译器是一种计算机程序,它将某种编程 ...
- 详解三大编译器:gcc、llvm 和 clang
传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd). 编译器一般构成 传统的编译器通常分为三个部分,前端(frontEnd),优化器(Opti ...
- LLVM和Clang背后的故事
LLVM是Apple官方支持的编译器,而该编译器的前端是Clang,这两个工具都被集成到了Xcode里面.在这篇文章中,我们来了解一下LLVM和Clang背后的故事. 在很长一段时间里,Apple一直 ...
- llvm编译linux,下载与编译LLVM和Clang
最近写编译器,要用到LLVM,记录一下在Linux下编译和安装的过程. 准备 LLVM编译器架构的前端是Clang,狭义的LLVM是指它的后端. 我们可以通过SVN来下载LLVM和Clang最新的源码 ...
最新文章
- SAP PI 7.3新特性介绍
- [20180627]测试bbed是否支持管道命令.txt
- sqlite库 —— 为什么要使用 SQLite 数据库?
- SolidWorks学习笔记4特征
- Django框架(6.django后台管理/通过后台对数据表的增删改)
- 2012 IBM软件技术峰会:IBM与开发者谈四大热门领域看法
- 吴恩达斯坦福大学机器学习 CS229 课程学习笔记(一)
- Spark cluster 部署
- 数值计算及matlab实现,用MATLAB实现数值计算
- VBS ADODB操作帮助手册
- 我的微信公众平台*1*
- 免费资源分享(六) Unity3D 雷达实时定位插件
- 计算机公式求时间差公式,excel时间差计算公式有哪些 excel怎么快速计算时间差...
- 在jQuery中,a标签trigger触发click不起作用的原因和解决方法
- ANativeWindow
- CARD耐药数据库Linux使用
- 水质污染源在线监测数据采集器
- JS中或者(或 or ||)与并且(与 and )
- Barrier与多线程
- 地平线机器人Waymo Open Dataset Challenge中2D目标检测赛道第二名方案解析
热门文章
- 服务器上ssl协议禁止,“SSL协议被禁用,无法安全的连接”怎么处理
- java请求url拼接xml_java访问一个URL,会返回给你一个XML格式的数据,该怎么实现?...
- Tomcat,servlet以及netty之间的简单区别
- 阿里云环境迁移记录 - RabbitMQ集群搭建
- Spring 事务实现机制
- 打造线上的大数据风控,我们发现了这三个坑
- [BZOJ 3622]已经没有什么好害怕的了(Dp+容斥原理)
- mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication解决办法
- 【转载】偏最小二乘法回归(Partial Least Squares Regression)
- 使用JDBC编程的问题总结