Компиляция с использованием Clang с использованием неопределенных ссылок на LibC++
Первая пара слишком длинна, чтобы ссылаться. Я получаю эту ошибку, когда пытаюсь скомпилировать clang++ -stdlib=libc++ ../main.cc ...
с лязгом и 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++ кажется на данный момент немного неполным, но это все равно мой первый выбор, когда он завершится.
ОБНОВЛЕНИЕ 26.05.2012: библиотека libC++ abi готова для C++, и я успешно использую clang ++ следующим образом clang++ -std=c++11 -stdlib=libc++ -lc++abi
,
4 ответа
Я считаю, что libC++ пока не поддерживает все функции исключений. Смотрите страницу статуса:
http://libcxxabi.llvm.org/spec.html
Возможно, вы могли бы ссылаться на libstdC++ GNU
Вот что работает для меня с пакетами Ubuntu Vivid для clang и libC++:
clang++ -std=c++11 -stdlib=libc++ <object files> -lc++abi -lsupc++
Важно, чтобы объектные файлы были перед -l
флаги, например, когда вы используете исключения. Очевидно, что это по-прежнему не будет ссылаться, если вы используете библиотеки, скомпилированные с libstdC++, и используете любые типы STL в этих интерфейсах.
Кажется, вы используете обработку исключений, но она не включена в компиляторе. Попробуйте передать -fexceptions в командную строку.
Я просто добавляю этот ответ, поскольку буквально только что совершил эту ошибку. Он компилировал большую часть того, что я писал, отлично в течение нескольких дней, но теперь он начинает выдавать неопределенные ссылочные ошибки ...
Итак ... Я ... вроде как компилировал с not. Ага. Это все было неправильно.
clang++
включает библиотеку C ++,
clang
нет. Ой!