не может собрать очищающий память инструментальный libc ++, который ссылается только на compile-rt (без libgcc)? - PullRequest
0 голосов
/ 04 марта 2019

Я хочу использовать средство очистки памяти 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)?Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...