2014-01-05 3 views
0

Я пытаюсь начать работу с C++. Я нахожусь на Mac с установленной ОС Mavericks.Ошибка компилятора Clang для очень простой программы

Программа Я пытаюсь скомпилировать это:

#include <iostream> 

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

    return 0; 
} 

Вот версия куб.см:

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

Почему пустые голоса? – TheBuzzSaw

+0

@ TheBuzzSaw Всплывающая подсказка на стрелке вниз говорит все: «** этот вопрос не показывает никаких исследований, ** неясно или ** не полезно. **« Кроме того, «вопросы должны демонстрировать минимальное понимание проблемы, являющейся решено». –

+0

Я думаю, что это немного грубо. Он явно нашел компилятор, но понятия не имел, что есть два режима. – TheBuzzSaw

ответ

2

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

c++ test.cc

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

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

+0

Спасибо! Книга C++, которую я читаю, говорит, чтобы использовать cc, странно. – ConditionRacer

+0

@ RandomParentheses Бросьте эту книгу далеко (но только после того, как вы сожгли ее бензином). Это такие дрянные книги, которые позже утверждают, что «массивы - это указатели», «ссылки - это указатели» и всевозможные другие популярные (и ужасные) вреда. –

+0

@ H2CO3 Это на самом деле «C++ Primer», который является самой популярной книгой для начинающих, упомянутой здесь: http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – ConditionRacer

1

Вам необходимо запустить clang++, а не только clang.

1

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

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

Смежные вопросы