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 .

25
demandé sur norcalli 2011-08-10 23:38:30

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

12
répondu Arvid 2011-08-10 19:57:21

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.

3
répondu Vir 2015-05-29 10:37:04

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.

2
répondu Tobias Schlegel 2011-08-10 19:44:42