实验环境
- Ubuntu 22.04
- LLVM 17.0.0
源代码获取
LLVM工程的github链接为https://github.com/llvm/llvm-project
,此处我们直接使用git克隆项目。需注意,由于LLVM目前依然在快速迭代,因此如果将来还需要使用LLVM 17.0.0,则需回退版本。命令如下:
git clone https://github.com/llvm/llvm-project.git
克隆成功后,当前目录下即出现llvm-project
。
源代码也可以通过其他方法,如直接下载压缩包获取,斯不赘述。
使用CMake配置Makefile
进入目录llvm-project
,运行如下命令:
cmake -S llvm -B build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt"
需注意,在Linux下-G
后一般为"Unix Makefiles"
,其他环境可能不同,需要根据场景调整。-DCMAKE_BUILD_TYPE
中选择Release
是因为Debug
模式下可执行文件会很大、编译更慢、运行速度慢,因此在开发过程中可用Debug
。此外,DLLVM_ENABLE_PROJECTS
中需要指定和Asan相关的子项目,否则无法使用ASan。
使用CMake编译和安装
在目录llvm-project
中执行如下命令:
sudo cmake --build build --target install -j$(nproc)
该步骤包含编译和安装2个环节。编译时间较长,可使用-j$(nproc)
指定多线程编译。安装成功后,在/usr/local/bin/
下有clang
相关的可执行文件。笔者的机器上,该目录是默认路径,因此可以在系统的任意位置使用clang
编译器。我们检查版本,为17.0.0,说明clang
安装成功。
clang -v # 等价于/usr/local/bin/clang -v
clang version 17.0.0 (https://github.com/llvm/llvm-project.git 2b0b85c05e74afa395f4250e1bff7ce6a51917af)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
启用ASan编译程序
例如需要检测样例程序test.c
,则可以使用如下命令编译程序:
clang test.c -fsanitize=address -g -o test
其中-fsanitize=address
即为开启ASan的编译选项。如果编译成功,则认为环境配置成功。