无法构建仅针对compile-rt(无libgcc)链接的内存消毒器检测到的libc ++?

时间:2019-03-04 20:01:47

标签: cmake llvm libc++ memory-sanitizer msan

我想在带有llvm工具链(libc ++,libunwind,compiler-rt,clang ...)的代码存储库上使用c ++内存清理器(msan)。因此,我需要做的第一件事就是构建msan仪器化的libc ++。

MemorySanitizerLibcxxHowTo,我需要使用选项-DLLVM_USE_SANITIZER=Memory-DLLVM_USE_SANITIZER=MemoryWithOrigin构建libc ++。

LLVM’s compiler runtime library部分的assembling a complete llvm toolchain

  

如果使用libc ++和/或libc ++ abi,​​则可能需要通过传递-DLIBCXX_USE_COMPILER_RT = YES和/或-DLIBCXXABI_USE_COMPILER_RT = YES来配置它们以使用编译器-rt而不是libgcc_s。否则,您可能最终会将两个运行时库链接到程序中(这通常是无害的,但很浪费)。

由于我的目标是完整的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)?预先感谢!

0 个答案:

没有答案