Я хочу использовать средство очистки памяти c ++ (msan) в репозитории с помощью цепочки инструментов llvm (libc ++, libunwind, compiler-rt, clang ...).поэтому первое, что мне нужно сделать, - это создать libc ++ с инструментарием MSAN.
С MemorySanitizerLibcxxHowTo , мне нужно собрать libc ++ с параметром -DLLVM_USE_SANITIZER=Memory
или -DLLVM_USE_SANITIZER=MemoryWithOrigin
.
С сборкой полного набора инструментов llvm , вLLVM’s compiler runtime library
раздел
Если вы используете libc ++ и / или libc ++ abi, вам может потребоваться настроить их для использования compiler-rt, а не libgcc_s, передав -DLIBCXX_USE_COMPILER_RT = YES и / или -DLIBCXXABI_USE_CTPILER= ДА, чтобы сделать.В противном случае вы можете получить обе библиотеки времени выполнения, связанные с вашей программой (это, как правило, безвредно, но расточительно).
Поскольку я стремлюсь к полной цепочке инструментов 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 и compiler rt)?Заранее спасибо!