Compiler avec Clang en utilisant des références non définies Libc++
les premiers couples sont trop longs pour être mentionnés. Je reçois cette erreur lorsque j'essaie de compiler clang++ -stdlib=libc++ ../main.cc ...
avec clang et libc++ à partir du 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'
SOLUTION: grâce à l'une des réponses, je connais la solution. libc++ ne peut pas être utilisé seul comme libstdc++, il doit être lié avec libc++abi . Cependant, libc++abi n'est pas encore complet, donc utiliser libc++ semble être un peu incomplet pour le moment, mais c'est toujours mon premier choix quand il se termine.
mise à JOUR 5/26/2012: libc++abi est maintenant terminée pour le C++, et j'ai été en utilisant clang++ comme suit avec succès clang++ -std=c++11 -stdlib=libc++ -lc++abi
.
3 réponses
je crois que libc++ ne supporte pas encore Toutes les fonctions d'exception. Voir la page d'état:
http://libcxxabi.llvm.org/spec.html
vous pourriez probablement faire un lien avec la libstdc++ de gnu
voici ce qui fonctionne pour moi avec les paquets Vivid D'Ubuntu pour clang et libc++:
clang++ -std=c++11 -stdlib=libc++ <object files> -lc++abi -lsupc++
il est important que les fichiers objets soient placés avant les drapeaux -l
, par exemple lorsque vous utilisez des exceptions. Évidemment, cela ne se liera pas si vous utilisez des bibliothèques compilées contre libstdc++ et utilisez n'importe quel type de STL dans ces interfaces.
on dirait que vous utilisez la gestion des exceptions, mais elle n'est pas activée dans le compilateur. Essayez de passer-fexceptions à la ligne de commande.