带有CMake的LLVM地址清理器

Kon*_*kin 2 c++ cmake llvm-clang address-sanitizer

我正在尝试使用带有-fsanitize = address选项的clang编译最简单的可执行文件。直接使用clang做到这一点非常简单。但是我的意思是通过CMake做到这一点。

我正在做这件事。CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.5.1 FATAL_ERROR)
project(TestSanitizer VERSION 0.1.0 LANGUAGES CXX)
add_executable(Test main.cpp)
target_compile_options(Test PUBLIC
    -std=c++17
    -Werror
    -Weverything
    -Wno-c++98-compat
    -Wno-c++98-c++11-c++14-compat
    -Wno-c++98-compat-pedantic
    -fsanitize=address)
Run Code Online (Sandbox Code Playgroud)

main.cpp:

int main(int, const char**) { return 0; }
Run Code Online (Sandbox Code Playgroud)

使用bash脚本(config_gen_build.sh)进行配置和制作:

if [ -d "bin" ]; then
    rm -rf bin
fi

mkdir bin
cd bin

#config and gen
export CC=/usr/bin/clang-5.0
export CXX=/usr/bin/clang++-5.0
cmake ./../

#build
make
Run Code Online (Sandbox Code Playgroud)

最后,我得到的错误是: 在此处输入图片说明

怎么了 我应该链接一些图书馆吗?

n. *_* m. 5

与地址清理-fsanitize=address器链接的最简单方法是将其指定为链接器以及编译器选项。这会使clang或gcc将正确的库和标志传递给链接器。