30

第一对太长了,无法参考。当我尝试clang++ -stdlib=libc++ ../main.cc ...使用来自 SVN 的 clang 和 libc++ 进行编译时,出现此错误。

error: undefined reference to 'typeinfo for char const*'
error: undefined reference to '__cxa_allocate_exception'
error: undefined reference to '__cxa_throw'
/tmp/cc-pbn00y.o:../main.cc:function std::__1::deque<double, std::__1::allocator<double> >::__add_back_capacity(): error: undefined reference to '__cxa_begin_catch'
/tmp/cc-pbn00y.o:../main.cc:function std::__1::deque<double, std::__1::allocator<double> >::__add_back_capacity(): error: undefined reference to '__cxa_rethrow'
/tmp/cc-pbn00y.o:../main.cc:function std::__1::deque<double, std::__1::allocator<double> >::__add_back_capacity(): error: undefined reference to '__cxa_end_catch'
/tmp/cc-pbn00y.o(.eh_frame+0xbd3): error: undefined reference to '__gxx_personality_v0'

解决方案:感谢其中一个答案,我知道解决方案。libc++不能像 libstdc++ 一样单独使用,它必须与libc++abi一起链接。不过libc++abi还没有完成,所以目前使用libc++似乎有点不完整,但完成后仍然是我的首选。

2012 年 5 月 26 日更新: libc++abi 现在已完成 C++,我一直在成功使用 clang++,如下所示clang++ -std=c++11 -stdlib=libc++ -lc++abi

4

4 回答 4

16

我相信 libc++ 还不支持所有异常函数。查看状态页面:

http://libcxxabi.llvm.org/spec.html

您可能可以链接到 gnu 的 libstdc++

于 2011-08-10T19:57:21.753 回答
4

以下是适用于 clang 和 libc++ 的 Ubuntu Vivid 软件包对我有用的方法:

clang++ -std=c++11 -stdlib=libc++ <object files> -lc++abi -lsupc++

目标文件位于标志之前很重要-l,例如,当您使用异常时。显然,如果您使用针对 libstdc++ 编译的库并在这些接口中使用任何 STL 类型,这仍然不会链接。

于 2015-05-29T10:37:04.373 回答
3

这似乎您正在使用异常处理,但它未在编译器中启用。尝试将 -fexceptions 传递给命令行。

于 2011-08-10T19:44:42.453 回答
0

我只是添加这个答案,因为我刚才确实犯了这个错误。它编译了我几天来写的大部分内容,但现在它开始抛出未定义的引用错误......

所以......我......有点可能是在用clangnot编译clang++。是的。这就是错误的全部。clang++包括 C++ 库的东西,clang不包括。哎呀!

于 2021-06-23T03:33:15.233 回答