for compile c++ clang std undefined-reference libc++

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.