llvm tools 中命令的简单使用

基本命令的介绍:
opt:在中间语言(IR)层优化代码。输入文件必须是LLVM中间语言(LLVM IR),并且输出文件的类型必须与输入文件的类型相同。
llc:通过特定的后端讲LLVM二进制代码转换为目标平台的会变代码或者目标文件。可以传入参数,选择优化等级,打开关闭debug选项,选择是否优化。
llvm-mc:组装(汇编)指令代码,可以产生不同格式(ELF,MachO和PE)的目标文件。</p><p>lli:用作LLVM中间语言(LLVM IR)的解释器和JIT编译器。
llvm-link:将传入的多个LLVM二进制文件链接成一个LLVM二进制文件。</p><p>llvm-as:将LLVM IR汇编语言穿换成LLVM二进制代码。
llvm-dis:llvm-as的逆操作。

// main.c
#include <stdio.h>

int sum(int x, int y);
int main() {

  int r = sum(3, 4);
  printf("r = %d\n", r);

  return 0;
}

// sum.c
int sum(int x, int y) {
  return x+y;
}

一步到位的编译方式:

$ clang main.c sum.c -o sum

分开编译:

1.将源文件分别编译为LLVM二进制代码

$ clang -emit-llvm -c main.c -o main.bc
$ clang -emit-llvm -c sum.c -o sum.bc
-emit-llvm选项告诉clang编译器生成LLVM中间代码(LLVM),-emit-llvm -c选项告知编译器生成LLVM二进制代码,-emit-llvm -S -c选项告知编译器生成LLVM汇编代码。

2.生成可执行文件有两种方式:

a)生成目标文件,通过系统链接器链接多个目标文件,生成科执行文件。

$ llc -filetype=obj main.bc -o main.o
$ llc -filetype=obj sum.bc -o sum.o
$ clang main.o sum.o -o sum

b)使用llvm-link链接多个二进制文件为一个文件,生成目标文件,之后生成可执行文件。

$ llvm-link main.bc sum.bc -o sum.linked.bc
$ llc -filetype=obj sum.linked.bc -o sum.linked.o
$ clang sum.linked.o -o sum


以上步骤可用一张图表示:


ps:经测测试,可以直接使用LLVM汇编代码直接生成可执行代码,推测是clang默认添加了其它没有执行的步骤。正如第一种编译方式,我们省略了很多步骤,依然生成了可执行代码。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值