【发布时间】:2017-07-28 18:45:10
【问题描述】:
我已经安装了 clang++-5.0 来尝试新的 C++17 功能,但是为了获得完整的体验,我需要一个新的库。在找不到更新的 libstdc++ 之后,我决定尝试使用 libc++。
我已经使用here 描述的类似方式检查了它。
结帐后,我用clang自己编译了它,因为建议使用clang。编译没有问题。然后我安装了它,把它们放在/usr/local/include/c++/v1目录下。
当我尝试编译任何东西时,我收到一条错误消息,提示编译器找不到<stddef.h>。我解决了“重定向”包含的问题:-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: cannot open shared object file: No such file or directory
当前标志:
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/libpthread.so.0 (0x00007f69bc479000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f69bc271000) /lib64/ld-linux-x86-64.so.2 (0x000055e63a9a9000)
【问题讨论】:
-
问题是链接过程中没有包含
libc++abi.so。较新的 libc++ 版本的libc++.so文件应该是包含INPUT(-lc++abi libc++.so.1)的链接器脚本。这是你看到的吗?你在构建 Clang 和 libc++ 时是否包含了 libc++abi 存储库?clang++ -### -v -stdlib=libc++ -xc++ /dev/null输出什么? -
确保在 LLVM 树中再次编译 libc++abi 和 libc++。它应该看起来像这样:libcxx.llvm.org/docs/BuildingLibcxx.html#getting-started
-
什么崩溃?您是否像使用 libc++ 一样在
/usr/local/lib中安装了 libc++abi? -
但它在同一目录中找到 libc++.so?
ldd <myprog>的输出是什么? -
我作为 libc++ 维护者的目标是让事情开箱即用,这样就没有人需要求助于堆栈溢出。随意写一个社区帖子,我绝对会审查它,但这里的真正目标是首先避免错误和对文档的需求。
标签: c++ ubuntu-16.04 clang++ libc++