用源代码编译LLVM 17并开启AddressSanitizer(ASan)

实验环境

  • 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的编译选项。如果编译成功,则认为环境配置成功。

猜你喜欢

转载自blog.csdn.net/weixin_46655675/article/details/131767609