Cmake 无法生成内存消毒器检测的libc++;仅针对编译rt(无libgcc)的链接? 我想在LLVM工具链(LIbc++,LyBunWin,编译器RT,CLAN……)代码复调中使用C++内存消除器(MSAN)。因此,我需要做的第一件事是构建msan指令化的libc++

Cmake 无法生成内存消毒器检测的libc++;仅针对编译rt(无libgcc)的链接? 我想在LLVM工具链(LIbc++,LyBunWin,编译器RT,CLAN……)代码复调中使用C++内存消除器(MSAN)。因此,我需要做的第一件事是构建msan指令化的libc++,cmake,llvm,libc++,memory-sanitizer,msan,Cmake,Llvm,Libc++,Memory Sanitizer,Msan,从中,我需要使用选项-DLLVM\u USE\u SANITIZER=Memory或-DLLVM\u USE\u SANITIZER=MemoryWithOrigin构建libc++ 从,在LLVM的编译器运行库部分 如果使用libc++和/或libc++abi,您可能需要通过向cmake传递-DLIBCXX\u use\u compiler\u rt=YES和/或-DLIBCXXABI\u use\u compiler\u rt=YES,将它们配置为使用编译器rt而不是libgcc。否则,两个

从中,我需要使用选项
-DLLVM\u USE\u SANITIZER=Memory
-DLLVM\u USE\u SANITIZER=MemoryWithOrigin
构建libc++

从,在
LLVM的编译器运行库
部分

如果使用libc++和/或libc++abi,您可能需要通过向cmake传递-DLIBCXX\u use\u compiler\u rt=YES和/或-DLIBCXXABI\u use\u compiler\u rt=YES,将它们配置为使用编译器rt而不是libgcc。否则,两个运行库都可能链接到程序中(这通常是无害的,但也是浪费)

由于我的目标是一个完整的llvm工具链,我认为我应该添加
-DLIBCXX\u USE\u COMPILER\u RT=YES
-DLIBCXXABI\u USE\u COMPILER\u 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\u USE\u SANITIZER=Memory
-DLIBCXX\u USE\u COMPILER\u RT=YES
都存在时,才会发生此错误。删除其中任何一个都可以解决问题

有什么方法可以解决这个问题并保留这两个选项(msan和编译器rt)?提前谢谢