无法用 libc++ 替换 stdlibc++,链接器阶段错误

无法用 libc++ 替换 stdlibc++,链接器阶段错误

我目前正在从事我们团队的一个项目,在 CentOS 机器上构建 LLVM 完整的 clang 工具链(Clang、libcxx、libcxxabi)。

以前,我们使用 llvm-toolset-7/clang++ 编译代码库,默认情况下,它使用 libstdc++ 进行编译和链接。现在,我们想切换到使用带有 libc++ 的 LLVM clang。我已经从源代码(5.0.1 版本)构建了 libc++ 和 libc++abi,并设置了相关标志来编译代码库,但结果在“链接器”阶段出现了一些问题:

为编译器设置的标志: -stdlib=libc++ -std=c++14

为链接器设置的标志: -stdlib=libc++

错误:
/opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/../../../../bin/ld: product.o: undefined reference to symbol '__cxa_free_exception@@CXXABI_1.3' //lib64/libstdc++.so.6: error adding symbols: DSO missing from command line clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)

我的问题是:

  1. 我们计划用 libc++ 替换 stdlibc++,并且我们已经设置了编译器和链接器来运行-stdlib=libc++。为什么它会抱怨 libstdc++?

  2. 我们怎样才能解决这个错误?(任何想法都将不胜感激!)

  3. 如果我们想用 libc++ 替换 stdlibc++,是否缺少了什么?

更多细节:

环境:CentOS Linux 版本 7.6.1810(核心)

Clang 版本:clang 版本 5.0.1(tags/RELEASE_501/final)

目标:x86_64-unknown-linux-gnu

线程模型:posix

我用来构建 LLVM clang、libcxx 和 libcxxabi 的 cmake 命令:

铛:
cmake -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DLLVM_LIBDIR_SUFFIX=64 ../llvm

libcxx:
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DLLVM_LIBDIR_SUFFIX=64 -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_CXX_ABI_INCLUDE_PATHS=../../libcxxabi/include ..

libcxxabi:
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DLLVM_LIBDIR_SUFFIX=64 -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLIBCXXABI_LIBCXX_INCLUDES=../../libcxx/include ..

相关内容