Ошибка компилятора Clang для очень простой программы

0

Я пытаюсь начать работу с c++. Я нахожусь на Mac с установленной ОС Mavericks.

Программа, которую я пытаюсь скомпилировать:

#include <iostream>

int main()
{
    std::cout << "Enter two numbers:" << std::endl;

    return 0;
}

Вот версия cc:

Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

Однако, когда я пытаюсь скомпилировать:

cc test.cc

Я получаю следующую ошибку:

...
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<<<std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in test-AeQQK5.o
  ___clang_call_terminate in test-AeQQK5.o
"___cxa_end_catch", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<<<std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in test-AeQQK5.o
"___gxx_personality_v0", referenced from:
  std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<<<std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in test-AeQQK5.o
  std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-AeQQK5.o
  Dwarf Exception Unwind Info (__eh_frame) in test-AeQQK5.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Что я делаю не так?

  • 0
    Почему за голоса?
  • 0
    @TheBuzzSaw Подсказка на стрелке вниз говорит само за себя: « этот вопрос не требует усилий по исследованию, он неясен или бесполезен». Кроме того, «вопросы должны демонстрировать минимальное понимание решаемой проблемы».
Показать ещё 1 комментарий
Теги:
clang
macos

3 ответа

2
Лучший ответ

Вы компилируете его как программу на C. Скомпилируйте его как программу C++:

C++ test.cc

Лучше бросьте несколько предупреждающих флагов:

C++ -Wall -Wextra -pedantic-errors test.cc

  • 0
    Спасибо! В книге на С ++, которую я читаю, сказано, что она использует cc, странно.
  • 0
    @RandomParentheses Выбросьте эту книгу далеко (но только после того, как вы сожгли ее бензином). Это такие дерьмовые книги, которые позже утверждают, что «массивы - это указатели», «ссылки - это указатели» и все другие популярные (и ужасные) шалости.
Показать ещё 2 комментария
1

Хотя прекрасно компилировать источник C++ *.cc с gcc (он обрабатывает файлы с этим расширением как источник C++), компоновщик нуждается в явной информации, чтобы ссылаться на соответствующую библиотеку C++.

(Примечание: я предполагаю, что clang и gcc похожи на эту проблему)

1

Вам нужно запустить clang++, а не просто clang.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню