第一对夫妇太长,无法参考。当我尝试使用来自SVN的clang和libc ++编译clang++ -stdlib=libc++ ../main.cc ...
时,我收到此错误。
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 ++似乎有点不完整,但它完成时仍然是我的第一选择。
UPDATE 5/26/2012: libc ++ abi现在已经完成了C ++,我已成功使用clang ++,如下clang++ -std=c++11 -stdlib=libc++ -lc++abi
。
答案 0 :(得分:13)
答案 1 :(得分:4)
这里有用于clang和libc ++的Ubuntu Vivid包对我有用:
clang++ -std=c++11 -stdlib=libc++ <object files> -lc++abi -lsupc++
目标文件必须位于-l
标记之前,例如当你使用例外。显然,如果你使用针对libstdc ++编译的库并在这些接口中使用任何STL类型,这仍然不会链接。
答案 2 :(得分:2)
这看起来像是在使用异常处理,但是在编译器中没有启用它。尝试将-fexceptions传递给命令行。
答案 3 :(得分:0)
我只是添加这个答案,因为我刚才确实犯了这个错误。它编译了我写的大部分内容几天都很好,但现在它开始抛出未定义的引用错误......
所以......我......有点可能是用clang
而不是clang++
编译。是的。那就是全部错误。 clang++
包含 C++ 库内容,clang
不包含。糟糕!