如何使用libc++;通过LLVMs build_docker_image.sh作为默认值? 我想用CLAN 6和LBC+++构建一个Doc容器,作为默认C++标准库。我想包括(并使用)LLVM项目clang、libcxx、libcxxabi、lld和compiler-rt

如何使用libc++;通过LLVMs build_docker_image.sh作为默认值? 我想用CLAN 6和LBC+++构建一个Doc容器,作为默认C++标准库。我想包括(并使用)LLVM项目clang、libcxx、libcxxabi、lld和compiler-rt,docker,clang,llvm,libc++,Docker,Clang,Llvm,Libc++,为了将libc++设置为默认值,我使用了CMAKE选项CLANG\u default\u CXX\u STDLIB=libc++(另外DCLANG\u default\u RTLIB=compiler rt将默认值设置为compiler rt)。第一阶段构建确实可以工作,但似乎没有安装libc++: $ git clone https://github.com/llvm-mirror/llvm.git $ cd llvm $ git checkout release_60 $ utils/doc

为了将libc++设置为默认值,我使用了CMAKE选项
CLANG\u default\u CXX\u STDLIB=libc++
(另外
DCLANG\u default\u RTLIB=compiler rt
将默认值设置为compiler rt)。第一阶段构建确实可以工作,但似乎没有安装libc++:

$ git clone https://github.com/llvm-mirror/llvm.git
$ cd llvm
$ git checkout release_60
$ utils/docker/build_docker_image.sh -s debian8 \
    -d "clang" -t "6" --branch branches/release_60 \
    -p compiler-rt -p libcxxabi -p libcxx -p clang \
    -i stage2-install-compiler-rt \
    -i stage2-install-libcxxabi \
    -i stage2-install-libcxx \
    -i stage2-install-clang \
    -i stage2-install-clang-headers -- \
    -DCMAKE_BUILD_TYPE=Release \
    -DCLANG_DEFAULT_CXX_STDLIB=libc++ \
    -DCLANG_DEFAULT_RTLIB=compiler-rt \
    -DLIBCXXABI_USE_LLVM_UNWINDER=YES \
    -DCLANG_ENABLE_BOOTSTRAP=ON \
    -DBOOTSTRAP_CMAKE_BUILD_TYPE=Release \
    -DBOOTSTRAP_CLANG_DEFAULT_CXX_STDLIB=libc++ \
    -DBOOTSTRAP_CLANG_DEFAULT_RTLIB=compiler-rt \
    -DBOOTSTRAP_LIBCXX_USE_COMPILER_RT=YES \
    -DBOOTSTRAP_LIBCXXABI_USE_COMPILER_RT=YES \
    -DCLANG_BOOTSTRAP_TARGETS="install-compiler-rt;install-libcxxabi;install-libcxx;install-clang;install-clang-headers"
在第二阶段构建中,我得到:

[...]
-- The C compiler identification is Clang 6.0.1
-- The CXX compiler identification is Clang 6.0.1
-- The ASM compiler identification is unknown
-- Found assembler: /tmp/clang-build/build/./bin/clang
-- Check for working C compiler: /tmp/clang-build/build/./bin/clang
-- Check for working C compiler: /tmp/clang-build/build/./bin/clang -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /tmp/clang-build/build/./bin/clang++
-- Check for working CXX compiler: /tmp/clang-build/build/./bin/clang++ -- broken
CMake Error at /usr/local/share/cmake-3.7/Modules/CMakeTestCXXCompiler.cmake:44 (message):
  The C++ compiler "/tmp/clang-build/build/./bin/clang++" is not able to
  compile a simple test program.

  It fails with the following output:

   Change Dir: /tmp/clang-build/build/tools/clang/stage2-bins/CMakeFiles/CMakeTmp



  Run Build Command:"/usr/bin/ninja" "cmTC_d8e88"

  [1/2] Building CXX object CMakeFiles/cmTC_d8e88.dir/testCXXCompiler.cxx.o

  [2/2] Linking CXX executable cmTC_d8e88

  FAILED: : && /tmp/clang-build/build/./bin/clang++
  CMakeFiles/cmTC_d8e88.dir/testCXXCompiler.cxx.o -o cmTC_d8e88 && :

  /usr/bin/ld: cannot find -lc++

  clang-6.0: error: linker command failed with exit code 1 (use -v to see
  invocation)

  ninja: build stopped: subcommand failed.





  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:45 (project)
[...]
单阶段构建似乎已成功完成:

$ git clone https://github.com/llvm-mirror/llvm.git
$ cd llvm
$ git checkout release_60
$ utils/docker/build_docker_image.sh -s debian8 \
    -d "clang-1stage" -t "6" --branch branches/release_60 \
    -p compiler-rt -p libcxxabi -p libcxx -p clang \
    -i install-compiler-rt \
    -i install-libcxxabi \
    -i install-libcxx \
    -i install-clang \
    -i install-clang-headers -- \
    -DCMAKE_BUILD_TYPE=Release \
    -DCLANG_DEFAULT_CXX_STDLIB=libc++ \
    -DCLANG_DEFAULT_RTLIB=compiler-rt
但当我运行容器时,链接也存在问题:

$ docker run -it clang:6
root@1e95a7ffe57a:/# echo "#include <iostream>" > main.cpp
root@1e95a7ffe57a:/# echo "int main(){ std::cout << \"Hello World\\n\"; }" >> main.cpp
root@1e95a7ffe57a:/# clang++ main.cpp 
/usr/bin/ld: /tmp/main-7d03e7.o: undefined reference to symbol '_Unwind_Resume@@GCC_3.0'
//lib/x86_64-linux-gnu/libgcc_s.so.1: error adding symbols: DSO missing from command line
clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation)
$docker run-它叮当作响:6
root@1e95a7ffe57a:/#echo“#include”>main.cpp

root@1e95a7ffe57a:/#echo“int main(){std::cout您缺少另一个LLVM项目

LLVM的libunwind提供了一个轻量级堆栈展开接口,并与libcxx和libcxxabi紧密耦合

您应该将libunwind签出到
projects
文件夹中,它应该由LLVM自动拾取。您可能还需要将
-DLIBCXXABI\u USE\u LLVM\u UNWINDER=YES
添加到CMake命令行


有用链接:。

这解决了单阶段构建问题,并为我提供了一个工作设置-谢谢!两阶段构建仍然会出现相同的错误。可能是构建脚本中存在错误?@BenjaminBuch sure:-)您的意思是,第二阶段失败错误消息与第一阶段相同-未定义对
\u Unwind\u Resume的引用y从第二阶段开始检查
CMakeOutput.log
CMakeError.log
——它们更明确地说明了哪些失败