Подтвердить что ты не робот

Компиляция с помощью Clang с использованием ссылок LibС++ undefined

Первые пары слишком длинны для ссылки. Я получаю эту ошибку, когда пытаюсь скомпилировать clang++ -stdlib=libc++ ../main.cc ... с clang и libС++ из 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'

РЕШЕНИЕ:. Благодаря одному из ответов, я знаю решение. libС++ не может использоваться сам по себе как libstdС++, он должен быть связан вместе с libС++ abi. Однако libС++ abi еще не завершен, поэтому использование libС++ кажется немного неполным на данный момент, но это по-прежнему мой первый выбор, когда он завершается.

ОБНОВЛЕНИЕ 5/26/2012: libС++ abi теперь закончен для С++, и я использовал clang++, как следует успешно clang++ -std=c++11 -stdlib=libc++ -lc++abi.

4b9b3361

Ответ 1

Я считаю, что libС++ еще не поддерживает все функции исключения. См. Страницу состояния:

http://libcxxabi.llvm.org/spec.html

Возможно, вы могли бы ссылаться на gnu libstdС++

Ответ 2

Вот что работает для меня с пакетами Ubuntu Vivid для clang и libС++:

clang++ -std=c++11 -stdlib=libc++ <object files> -lc++abi -lsupc++

Важно, чтобы объектные файлы приходили перед флагами -l, например. когда вы используете исключения. Очевидно, что это все равно не будет связано, если вы используете библиотеки, скомпилированные с libstdС++, и используйте любые типы STL в этих интерфейсах.

Ответ 3

Кажется, что вы используете обработку исключений, но в компиляторе она не включена. Попробуйте передать файлы в командной строке.