我正在试图弄乱我在假期中获得的这本C ++书籍,我来自对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$
答案 0 :(得分:5)
是的,您应该使用g++
来编译C ++而不是gcc
,但是因为您说您不熟悉使用编译器,所以可能值得详细说明答案。
GCC代表GNU编译器集合,是一组程序,可用于编译各种语言的源代码。命令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 ++文件之外的任何内容。您可以通过在选项中添加-lstdc++
来链接到标准库的GCC实现。所以gcc -lstdc++ prog2.cpp
应该可以正常工作。
但是,为方便起见,还为C ++程序员提供了另一个命令。即,g++
。 g++
命令将自动链接到C ++标准库,因此您不必明确地执行此操作。它还会将.c
,.h
和.i
文件视为C ++文件。
如果您始终坚持使用gcc
来编译C和g++
,那么您应该没有问题。
答案 1 :(得分:1)
您需要使用g ++而不是gcc