Компиляция с Clang с использованием неопределенных ссылок Libc++
Первая пара слишком длинна, чтобы ссылаться на нее. Я получаю эту ошибку, когда пытаюсь скомпилировать clang++ -stdlib=libc++ ../main.cc ...
с clang и libc++ из 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'
Решение: благодаря одному из ответов я знаю решение. libc++ не может использоваться сам по себе, как libstdc++, он должен быть связан вместе сlibc++abi . Тем не менее, libc++abi еще не завершен, поэтому использование libc++ кажется немного неполным на данный момент, но это все еще мой первый выбор, когда он завершает.
Обновление 5/26/2012: libc++abi теперь завершен для C++ , и я успешно использую clang++ следующим образом clang++ -std=c++11 -stdlib=libc++ -lc++abi
.
3 ответа:
Я считаю, что libc++ пока не поддерживает все функции исключений. Смотрите страницу состояния:
Http://libcxxabi.llvm.org/spec.html
Вы, вероятно, могли бы связать с GNU libstdc++
Вот что работает для меня с пакетами Ubuntu Vivid для clang и libc++:
clang++ -std=c++11 -stdlib=libc++ <object files> -lc++abi -lsupc++
Важно, чтобы объектные файлы располагались перед флагами
-l
, например, при использовании исключений. Очевидно, что это все равно не будет связываться, если вы используете библиотеки, скомпилированные против libstdc++ , и используете любые типы STL в этих интерфейсах.