Не удалось заменить stdlibC++ на libC++, ошибка фазы компоновщика
В настоящее время я работаю над одним из проектов моей команды по созданию полной цепочки инструментов LLVM (Clang, libcxx, libcxxabi) на компьютере CentOS.
Ранее мы скомпилировали нашу кодовую базу с помощью llvm-toolset-7/clang++, которая по умолчанию использует libstdC++ для компиляции и компоновки. И теперь мы хотели бы перейти на использование LLVM clang с libC++. Я собрал libC++ и libC++ abi из исходного кода (выпуск 5.0.1) и установил соответствующие флаги для компиляции нашей базы кода, но оказалось, что на этапе "компоновщик" возникли некоторые проблемы:
Флаги, установленные для компилятора:-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)
Мой вопрос:
Мы планируем заменить stdlibC++ на libC++, и мы настроили компилятор и компоновщик для запуска с
-stdlib=libc++
, Почему он жалуется на libstdC++?Как мы можем устранить эту ошибку? (Любые идеи были бы хорошы!)
- Чего не хватает, если мы хотим заменить stdlibC++ на libC++?
Немного больше деталей:
Среда: CentOS Linux выпуск 7.6.1810 (Core)
Версия Clang: версия Clang 5.0.1 (tags/RELEASE_501/final)
Цель: x86_64-unknown-linux-gnu
Модель потока: posix
Команды cmake, которые я использовал для сборки LLVM clang, libcxx и libcxxabi:
лязг: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 ..