Не может собрать очищающий память инструментальный 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)? Заранее спасибо!

0 ответов

Другие вопросы по тегам