стандартная библиотека — C ++ Primer (5-е издание) для начинающих

Возможный дубликат:
Линкер GCC не может найти стандартную библиотеку?

Я пытаюсь возиться с этой книгой по С ++, которую я получил на праздники, я исхожу из ограниченного понимания Python, так что эти вещи очень странные для меня.

Я набрал этот код из одного из первых уроков в своем текстовом редакторе и сохранил его в виде файла .cpp.

#include <iostream>
int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << "The sum of " << v1 << " and " << v2
<< " is " << v1 + v2 << std::endl;
return 0;
}

но мой терминал выдает этот сумасшедший вывод, когда я пытаюсь его скомпилировать, что происходит?

Raymond-Weisss-MacBook-Pro:c++ Raylug$ gcc prog2.cpp
Undefined symbols for architecture x86_64:
"std::basic_istream<char, std::char_traits<char> >::operator>>(int&)", referenced from:
_main in cckdLEun.o
"std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))", referenced from:
_main in cckdLEun.o
"std::basic_ostream<char, std::char_traits<char> >::operator<<(int)", referenced from:
_main in cckdLEun.o
"std::ios_base::Init::Init()", referenced from:
__static_initialization_and_destruction_0(int, int)in cckdLEun.o
"std::ios_base::Init::~Init()", referenced from:
___tcf_0 in cckdLEun.o
"std::cin", referenced from:
_main in cckdLEun.o
"std::cout", referenced from:
_main in cckdLEun.o
"std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
_main in cckdLEun.o
"std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
_main in cckdLEun.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Raymond-Weisss-MacBook-Pro:c++ Raylug$

4

Решение

Да, вы должны использовать g++ компилировать C ++ вместо gcc, но, вероятно, стоит уточнить ответ, поскольку вы говорите, что вы новичок в использовании компиляторов.

GCC означает GNU Compiler Collection и представляет собой набор программ, которые можно использовать для компиляции исходного кода для различных языков. Команда gcc предоставляет пользователям внешний интерфейс для компиляции своих программ. gcc Команда попытается определить язык, который вы хотите скомпилировать, из расширений файлов в исходных файлах. Например, файл с именем hello.c скомпилирует как C, файл с именем foo.cpp скомпилируется как C ++, и файл с именем bar.m скомпилируется как Objective-C.

Вы можете дать -x Возможность явно указать, какой язык для компиляции, независимо от расширения файла. Например, gcc -x c++ main.c скомпилирует main.c как файл C ++, несмотря на наличие .c расширение.

Тем не менее, даже если gcc определит, что ваши файлы C ++, по умолчанию он все равно не будет ссылаться на стандартную библиотеку C ++. Эта библиотека должна быть связана с компиляцией чего угодно, кроме самых простых файлов C ++. Вы можете сделать ссылку на реализацию стандартной библиотеки GCC, добавив -lstdc++ к вашим вариантам. Так gcc -lstdc++ prog2.cpp должно работать нормально.

Однако для удобства предусмотрена другая команда для программистов на C ++. А именно, g++, g++ Команда автоматически свяжется со стандартной библиотекой C ++, поэтому вам не нужно делать это явно. Это также вызывает .c, .h а также .i файлы, которые будут рассматриваться как файлы C ++.

Если вы последовательно придерживаетесь gcc для составления С и g++У вас не должно быть проблем.

5

Другие решения

Вам нужно использовать g ++ вместо gcc

1