Компиляция с использованием 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нет. Ой!

Другие вопросы по тегам