首页 > 其他分享 >llvm编译命令与选项

llvm编译命令与选项

时间:2023-08-02 21:23:57浏览次数:38  
标签:选项 文件 llvm bc c++ 编译 clang hello

编译生成可执行文件

clang hello.c -o hello

编译生成bc文件(不可读)

得到 LLVM 字节码文件.bc(不可读字节码文件)

clang -O3 -emit-llvm hello.c -c -o hello.bc
  • -O3: 表示使用编译优化级别3来编译程序
  • -emit-llvm: 表示要通过 clang 得到 LLVM 的字节码文件(.bc)或者汇编文件(.ll)
  • -c: 表示要得到字节码文件
  • -g: 用于 gdb 调试
  • -o: 指定了输出文件的名称,字节码文件一般以** .bc 结尾**

llvm-dis反汇编工具

llvm-dis hello.bc hello.ll

用llvm-dis工具反汇编得到 LLVM 汇编文件(可读)

得到 LLVM 汇编文件(可读)

-S: 表示要得到汇编文件

clang -O3 -emit-llvm hello.c -S -o hello.ll

llvm-as 汇编(.ll)转字节码(.bc)

用 llvm-as 工具通过汇编文件(.ll 文件)得到字节码文件(.bc 文件)

llvm-as hello.ll hello.bc

编译 cpp 文件

clang++: 编译 .cpp 文件
-Wall: 输出警告信息
-g: 用于 gdb 调试
-std: 编译的标准(-std=c++98、-std=c++03、-std=c++11、-std=c++0x)
-stdlib: C++ 标准头文件

clang++ -Wall -g -std=c++11 -stdlib=libc++ Hello.cpp -o hello
clang++ -Wall -std=c++11 -stdlib=libc++ -emit-llvm -c Hello.cpp -o hello.bc

标签:选项,文件,llvm,bc,c++,编译,clang,hello
From: https://www.cnblogs.com/UFO-blogs/p/17601765.html

相关文章

  • llvm输入输出流
    llvm::raw_ostreamllvm::raw_ostream是一个抽象class,有两个重要的纯虚函数由子类实现,write_impl()保存将数据写入基础流的逻辑,current_pos()返回流中当前正在写入的位置。llvm提供了以下输出流实现:outs()forwritingtostdouterrs()forwritingtostderrnulls()whichd......
  • 05_llvm IR测试创建ifelse语句及多个block
    一个ifelse源码编译先看如下代码:intfunc(inta){intb;if(a>5)b=6;elseb=5;returnb;}编译命令../output/bin/clang++-emit-llvmllvm_if_else.c-S-oir.ll编译后的IR如下:;ModuleID='llvm_if_else.c'source_filename="llvm_if_else.c&q......
  • 04_llvm_IR测试生成运算指令
    四则运算指令介绍如下:#include<vector>#include"llvm/IR/Module.h"#include"llvm/IR/LLVMContext.h"#include"llvm/Support/raw_ostream.h"#include"llvm/IR/Function.h"#include"llvm/IR/Verifier.h"#include......
  • 03_llvm_IR测试创建变量
    主要分全局变量、函数参数、局部变量(常量)与返回值测试全局变量介绍说明、代码、编译与结果如下:#include"llvm/IR/Module.h"#include"llvm/IR/LLVMContext.h"#include"llvm/Support/raw_ostream.h"#include"llvm/IR/Function.h"#include"llvm/IR/Verifier.h&qu......
  • C语言逆向——预处理之宏定义、条件编译与文件包含
    预处理之宏定义、条件编译与文件包含预处理一般是指在程序源代码被转换为二进制代码之前,由预处理器对程序源代码文本进行处理,处理后的结果再由编译器进一步编译。预处理功能主要包括宏定义、文件包含、条件编译三部分。宏定义简单的宏:#define标识符字符序列#defineFALSE0#d......
  • C语言逆向——数组和结构体,数组多维只是一个编译构造的假象,本质会转成一维数组,结构体
    数组数组是C语言中非常重要的一个概念,学习C语言主要就是两个知识点:数组、指针,学好这两个,那么你的C语言一定也会很好。什么是数组?或者说什么情况下我们需要使用数组,比如说我们需要定义一个人的年龄,我们可以定义一个变量来表示,但是如果我们需要定义三个人的年龄呢?那就需要三个变量来......
  • 当编译器没有SetProcessDpiAwareness()这个函数时...
    #include<Shlobj.h>intsetdpi(){//定义一个函数指针类型typedefHRESULT(WINAPI*SetProcessDpiAwarenessFunc)(intvalue);//加载Shcore.dllHMODULEhModule=LoadLibrary("Shcore.dll");if(hModule==NULL){//加载失败......
  • live555交叉编译
    一、下载live555源码源码下载路劲为:http://www.live555.com/liveMedia/二、交叉编译下面以aarch64-linux-gnu编译器为例说明交叉编译方法2.1不编译openssl由于live555里面默认使用到openssl,需要先编译openssl,比较麻烦,可以配置不编译进去openssl.1、复制con......
  • 编译器、链接器和解释器
    编译器编译器的作用就是将高级编程语言翻译为机器代码。编译器工作过程一般分为:词法分析:将高级语言解析成Token集合;语法分析:将Token集合构建成语法树,在这个过程可以判断出语法是否有误,比如while后面是否{等等;语义分析:判断语法树是否有明显的语义错处,比如:string不能......
  • java 查看class文件的jdk版本的两种方式(编译版本)
    1.情景展示有时候我们需要知道jar包里面class文件的jdk编译版本,来排查错误。以上图为例,如何实现?2.具体分析将其中一个class文件解压出来,然后查看大致的jdk版本号。3.解决方案使用解压工具打开gridreport.jar,将Report.class解压到桌面。方式一:使用文本编辑工具EditPlus......