无法将libc ++与clang ++ - 5.0一起使用

时间:2017-03-08 09:17:59

标签: c++ ubuntu-16.04 clang++ libc++

我已经安装了clang ++ - 5.0来试用新的C ++ 17功能,但为了获得完整的体验,我需要一个新的库。在找不到更新的libstdc ++后,我决定试用libc ++。

我已使用here描述的类似方式检查了它。

结帐后,我已经用clang编译了它,因为它被建议使用clang。编译没有问题。然后我安装了它,将它们放在/usr/local/include/c++/v1目录中。

当我尝试编译任何东西时,我收到一个错误,说编译器找不到<stddef.h>。我用&#34;重定向&#34;解决了这个问题。包括:-isystem /usr/local/include/c++/v1

然后链接器抛出了许多与异常和虚拟表相关的错误。我不知道在这种情况下该怎么做。

是否可以修复它?

我的设置: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 =&gt; (0x00007ffd1b7da000)

     

libc ++ abi.so.1 =&gt; /usr/local/lib/libc++abi.so.1(0x00007f69bd322000)

     

libc ++。so.1 =&gt; /usr/local/lib/libc++.so.1(0x00007f69bcf80000)

     

libm.so.6 =&gt; /lib/x86_64-linux-gnu/libm.so.6(0x00007f69bcc76000)

     

libgcc_s.so.1 =&gt; /lib/x86_64-linux-gnu/libgcc_s.so.1(0x00007f69bca60000)

     

libc.so.6 =&gt; /lib/x86_64-linux-gnu/libc.so.6(0x00007f69bc697000)

     

libpthread.so.0 =&gt; /lib/x86_64-linux-gnu/libpthread.so.0(0x00007f69bc479000)

     

librt.so.1 =&gt; /lib/x86_64-linux-gnu/librt.so.1(0x00007f69bc271000)   /lib64/ld-linux-x86-64.so.2(0x000055e63a9a9000)

1 个答案:

答案 0 :(得分:2)

所以导致问题的是我离开了libc ++ abi的部分。大多数程序都是docs中规定的,略有偏差。

我的程序大致如下:

  • 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