c++ - compile - llvm 3.7 1
Compilando con Clang usando referencias indefinidas de Libc++ (3)
Creo que libc ++ no soporta todas las funciones de excepción todavía. Ver la página de estado:
http://libcxxabi.llvm.org/spec.html
Probablemente podrías enlazar contra libstdc ++ de gnu
La primera pareja es demasiado larga para referirse. Recibo este error cuando intento compilar clang++ -stdlib=libc++ ../main.cc ...
con clang y libc ++ desde el SVN.
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''
SOLUCIÓN: Gracias a una de las respuestas, conozco la solución. libc ++ no se puede usar solo como libstdc ++, se debe vincular junto con libc ++ abi . Sin embargo, libc ++ abi aún no está completo, por lo que el uso de libc ++ parece estar un poco incompleto por el momento, pero sigue siendo mi primera opción cuando se completa.
ACTUALIZACIÓN 26/05/2012: libc ++ abi ahora está completo para C ++ y he estado usando clang ++ de la siguiente manera con éxito clang++ -std=c++11 -stdlib=libc++ -lc++abi
.
Esto es lo que me funciona con los paquetes de Ubuntu Vivid para clang y libc ++:
clang++ -std=c++11 -stdlib=libc++ <object files> -lc++abi -lsupc++
Es importante que los archivos de objetos aparezcan antes de los indicadores -l
, por ejemplo, cuando utiliza excepciones. Obviamente, esto aún no se vinculará si utiliza bibliotecas compiladas contra libstdc ++ y utiliza cualquier tipo de STL en esas interfaces.
Parece que está utilizando el manejo de excepciones, pero no está habilitado en el compilador. Intente pasar -fexceptions a la línea de comandos.