我希望clang将我的C/C++代码编译成LLVM位码,而不是二进制可执行文件.我怎样才能做到这一点呢?

如果我有LLVM位代码,我如何进一步将其编译成二进制可执行文件?

在编译成二进制可执行文件之前,我想将自己的一些代码添加到LLVM位代码中.

推荐答案

给定一些C/C++文件foo.c:

> clang -S -emit-llvm foo.c

生成foo.ll,这是一个LLVM IR文件.

-emit-llvm选项也可以直接传递给编译器前端,而不是通过-cc1传递给驱动程序:

> clang -cc1 foo.c -emit-llvm

使用IR生成foo.ll.-cc1增加了一些很酷的选项,比如-ast-print.有关更多详细信息,请查看-cc1 --help.


要进一步编译LLVM IR以进行组装,请使用llc工具:

> llc foo.ll

使用汇编生成foo.s(默认为运行它的机器体系 struct ).llc是LLVM工具之一-here is its documentation.

C++相关问答推荐

为什么在Linux(特别是Ubuntu 20.04LTS)上,POSIX共享内存对象在重启后仍然存在,然后突然变成了根用户?

如何创建由符号组成的垂直结果图形?

为什么删除CAP_DAC_OVERRIDE后创建文件失败?

模拟shell并运行.sh文件

LONG_DOUBLE_T是否存在(标准C:C23)

Char变量如何在不使用方括号或花括号的情况下存储字符串,以及它如何迭代到下一个字符?

SSH会话出现意外状态

为什么中断函数会以这种方式影响数组?

Zlib:解压缩大文件导致";无效代码长度设置";错误

安全倒计时循环

如何使这个While循环在新行上结束

从C中的函数返回静态字符串是不是一种糟糕的做法?

为什么我的二叉树删除删除整个左部分的树?

传递给函数的 struct 中的数组

模仿 memmove 的行为

当 n 是我们从用户那里获得的整数时,创建 n 个 struct 参数

std::malloc/calloc/realloc/free 与纯 C 的 malloc/calloc/realloc/free 有什么不同

memcmp 是否保证按顺序比较字节?

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

变量的指针右对齐,函数的指针左对齐