llvm ツールチェーン (libc++、libunwind、compiler-rt、clang ...) を使用して、コード リポジトリで c++ メモリ サニタイザー (msan) を使用したいと考えています。したがって、最初に行う必要があるのは、msan-instrumented libc++ をビルドすることです。
MemorySanitizerLibcxxHowToから、オプション-DLLVM_USE_SANITIZER=Memory
orを指定して libc++ をビルドする必要があります-DLLVM_USE_SANITIZER=MemoryWithOrigin
。
完全なllvmツールチェーンの組み立てから、LLVM’s compiler runtime library
セクションで
libc++ および/または libc++abi を使用している場合は、-DLIBCXX_USE_COMPILER_RT=YES および/または -DLIBCXXABI_USE_COMPILER_RT=YES を cmake に渡して、libgcc_s ではなく compiler-rt を使用するように構成する必要がある場合があります。そうしないと、両方のランタイム ライブラリがプログラムにリンクされてしまう可能性があります (これは通常、無害ですが、無駄です)。
私は完全なllvmツールチェーンを目指しているので、追加する必要があると思い-DLIBCXX_USE_COMPILER_RT=YES
ます-DLIBCXXABI_USE_COMPILER_RT=YES
そこで、以下のスクリプトを使用して libcxx と libcxxabi をダウンロードし、予想されるディレクトリ レイアウトを作成してビルドを実行します。
#!/bin/bash
file_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
num_of_processors=$(cat /proc/cpuinfo | grep -c ^processor)
cd $file_dir
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
(cd llvm/projects && svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx)
(cd llvm/projects && svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi)
export CC=clang
export CXX=clang++
[ -d build ] && rm -rf build
mkdir -p build && cd build
cmake ../llvm -DCMAKE_INSTALL_PREFIX=.. \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_USE_SANITIZER=Memory \
-DLIBCXX_USE_COMPILER_RT=YES \
-DLIBCXXABI_USE_COMPILER_RT=YES
make install-libcxx install-libcxxabi -j$num_of_processors
私が得るエラーは次のとおりです。
-- Performing Test LIBCXX_SUPPORTS_STD_COLON_CXX11_FLAG - Failed
CMake Error at projects/libcxx/CMakeLists.txt:538 (message):
C++11 or greater is required but the compiler does not support c++11
-- Configuring incomplete, errors occurred!
See also "~/libcxx-
msan/build/CMakeFiles/CMakeOutput.log".
See also "~/libcxx-
msan/build/CMakeFiles/CMakeError.log".
-DLLVM_USE_SANITIZER=Memory
このエラーは、-DLIBCXX_USE_COMPILER_RT=YES
両方が存在する場合にのみ発生します。それらのいずれかを削除すると、問題が解決します。
問題を修正し、両方のオプション (msan とコンパイラ rt) を維持する方法はありますか? 前もって感謝します!