418 字
2 分钟
clang
2024-08-10
无标签
man clang中的说明

- 预处理 通常会处理代码中的
#开头的预编译指令,对源代码做分词处理,得到token流 - 语法分析与语义分析 把token流解析成语法树,并对语法树做语义分析,输出是抽象语法树
- 代码生成与优化 把ast进一步降解成llvm ir,并在llvm ir层面对代码做优化,处理目标相关的代码生成,输出汇编文件(也可以直接调用内部的汇编器直接生成目标文件)
- 汇编 运行汇编器把汇编代码转换成目标代码
- 链接 把多个目标文件链接成一个可执行文件或者动态库
跟编译流程相关的参数

-E运行预处理器-fsyntax-only只作语法检查-S生成汇编-c生成目标文件-S --emit-llvm生成llvm ir
-emit-llvm -c生成llvm字节码,可以看成有一个虚拟的指令集能够执行llvm字节码,生成了这个虚拟平台的目标文件,llvm字节码能用lli解释器解释执行
- 不指定上述选项,所有的阶段都会运行生成可执行文件或者动态库文件
一些操作
生成动态库
clang -shared -fPIC files...
生成静态库
- 生成目标文件
clang -c tmp.c -o tmp.o - 生成静态归档库
ar [...options] libfile files...- c 如果需要生成新的库文件,不要警告
- r 代替库中现有的文件或者插入新的文件
- v 输出详细信息 查看静态归档库内容
❯ ar t libtmp.a
tmp.o
