2017-12-01 30 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; } 

configureと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は適切なライブラリとフラグをリンカに渡します。

関連する問題