Не может собрать очищающий память инструментальный libC++, который ссылается только на compile-rt (без libgcc)?
Я хочу использовать очиститель памяти 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_COMPILER_RT=YES для создания. В противном случае вы можете получить обе библиотеки времени выполнения, связанные с вашей программой (это обычно безвредно, но расточительно).
Так как я стремлюсь к полной цепочке инструментов llvm, я думаю, что я должен добавить -DLIBCXX_USE_COMPILER_RT=YES
а также -DLIBCXXABI_USE_COMPILER_RT=YES
Поэтому я использую приведенные ниже сценарии для загрузки libcxx и libcxxabi, создания ожидаемого макета dir и запуска сборки.
#!/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)? Заранее спасибо!