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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹无悔

请支持我的梦想!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值