无法将libc++与clang++-5.0一起使用
Unable to use libc++ with clang++-5.0
我安装了clang++-5.0来尝试新的C++17功能,但为了获得完整的体验,我需要一个新的库。在找不到更新的libstdc++之后,我决定试用libc++。
我已经用这里描述的类似方式检查过了。
结账后,我用clang本身编译了它,因为有人建议它使用clang。编纂工作顺利进行。然后我安装了它,让它们放在/usr/local/include/c++/v1
目录中。
当我试图编译任何东西时,我收到一个错误,说编译器找不到<stddef.h>
。我用";重定向";包括:CCD_ 3。
但随后链接器抛出了许多与异常和虚拟表相关的错误。我不知道在这种情况下该怎么办。
有可能修理它吗?
我的设置:ubuntu 16.04 LTS所有更新,clang++-5.0,cmake-3.6.
这是我的旗帜:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v -stdlib=libc++ -Wall -Wextra -pedantic-errors -std=c++1z -isystem /usr/local/include/c++/v1")
错误消息摘录:
//usr/local/lib/libc++.so: undefined reference to `__cxa_end_catch'
//usr/local/lib/libc++.so: undefined reference to `__cxa_pure_virtual'
//usr/local/lib/libc++.so: undefined reference to `__cxa_rethrow'
//usr/local/lib/libc++.so: undefined reference to `vtable for __cxxabiv1::__si_class_type_info'
//usr/local/lib/libc++.so: undefined reference to `vtable for __cxxabiv1::__class_type_info'
//usr/local/lib/libc++.so: undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info'
更新:
在构建libc++abi之后,它成功地通过了构建步骤,尽管现在它崩溃了,错误代码是
加载共享库时出错:libc++abi.so.1:无法打开共享对象文件:没有这样的文件或目录
当前标志:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem /usr/local/include/c++/v1 -stdlib=libc++ -lc++abi -Wall -Wextra -pedantic-errors -std=c++1z")
看了一眼,发现它们在/usr/lib/
中不存在,但在/usr/local/lib
中存在。
以下是ldd program
:的输出
linux vdso.so.1=>(0x00007ffd1b7da000)
libc++abi.so.1=>usr/local/lib/libc++abi.so.1(0x00007f69bd322000)
libc++.so.1=>usr/local/lib/libc++.so.1(0x00007f69bcf80000)
libm.so.6=>lib/x86_64-linux-gnu/libm.so.6(0x00007f69bcc76000)
libgcc_s.so.1=>lib/x86_64-linux-gnu/libgcc_s.so.1(0x00007f69bca60000)
libc.so.6=>lib/x86_64-linux-gnu/libc.so.6(0x00007f69bc697000)
libpthread.so.0=>lib/x86_64-linux-gnu/libphread.so.0(0x00007f69bc479000)
librt.so.1=>lib/x86_64-linux-gnu/libt.so.1(0x00007f69bc271000)/lib64/ld-linux x86-64.so.2(0x000055e63a9a9000)
所以导致问题的实际上是我把这个部分留给了libc++abi。大部分程序都符合文件中的规定,只有轻微偏差。
对我来说,程序大致如下:
-
Checkout llvm
-
签出libc++和libc++abi。记得同时结账!
-
配置。我不确定它是否重要,但我用发布配置构建了它,例如指定的
-DCMAKE_BUILD_TYPE=Release
。此外,请确保它将使用clang本身进行编译。 -
安装两者。它们可能在
/usr/local/lib/
文件夹附近。 -
让编译器知道您需要libc++。标志为
-stdlib=libc++ -lc++abi
。如果它会抱怨缺少<stddef.h>
,请将-isystem path/to/includes/
添加到编译器标志中,在我的情况下就是-isystem /usr/local/include/c++/v1
。
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 奇怪的结构&GCC&clang(void*返回类型)
- 与clang++一起使用的VS代码在构建良好的C++文件中显示错误
- 是否可以将 Clang-Tidy 与 QNX 一起使用?
- 如何将 Clang 静态分析器与 Cortex-M 项目一起使用?
- C 17可以与CUDA一起使用Clang
- 无法将libc++与clang++-5.0一起使用
- 可以与CMAKE-BUILD一起使用Clang静态分析仪(扫描构建)
- GCC 中的编译器错误,但在将 decltype 与具有尾随返回类型语法的模板化成员函数一起使用时没有 clang
- GCC vs Clang:将功能与-FPIC一起插入
- 将 boost/thread headers 与 clang++ (Windows) 一起使用时出现问题
- 将 TI 链接器命令文件与 Clang 一起使用
- 如何将Compiler实例和ASTConsumer与clang 3.6一起使用
- 在 ubuntu 12.04 上设置 Xerces 以与 cmake 和 clang 一起使用
- 不允许Clang格式与评论混在一起
- 将 clang 3.1 与初始值设定项列表一起使用
- Clang:将绑定或mem_fn与字符串::c_str和转换一起使用时出现问题
- 如何让c++ 0x / c++ 11风格的基于范围的for循环与clang一起工作
- c++ 11,枚举类,在c++中未定义引用,与clang++一起工作