2017-12-01 20 views
0

-fsanitize = address 옵션을 사용하여 clang을 사용하여 가장 간단한 실행 파일을 컴파일하려고합니다. clang을 직접 사용하면 매우 간단합니다. 그러나 제 요점은 CMake를 통해 그것을하는 것입니다.CMake가있는 LLVM 주소 소독제

내가 어떻게하는지 알아 보겠습니다. 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) 

MAIN.CPP

을 :

int main(int, const char**) { return 0; } 

구성 및 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 

을, 오류가 내가 무엇입니까 : enter image description here

무엇이 잘못 되었나요? 오히려? 일부 라이브러리와 연결해야합니까?

+1

컴파일러 및 링커 옵션으로 -fsanitize = address가 필요합니다. –

+0

그 대답은 감사합니다. 답변을 추가 할 수 있습니다. 승인 할 것입니다. –

답변

2

주소 살균제와 연결하는 가장 쉬운 방법은 컴파일러와 옵션 인 링커로 -fsanitize=address을 지정하는 것입니다. 이렇게하면 clang 또는 gcc가 올바른 라이브러리 및 플래그를 링커에 전달합니다.