2012-12-27 5 views
4

가능한 중복 :
GCC linker can’t find standard library?C++ 프라이머 (5 판) 초보자 당황

나는이 C 나 휴일 가지고 ++ 책을 엉망으로 노력하고, 나는 제한에서 오는입니다 파이썬에 대한 이해가이 물건이 나에게 이상하다고.

첫 번째 수업 중 하나에서이 코드를 내 텍스트 편집기에 입력하고 .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$ 
+5

gcc는 g입니다. g ++는 C++입니다. – chris

+0

네, 효과가있었습니다! 고마워요, 편집자는 여전히 새롭고 신비 스럽습니다. – lerugray

+0

[this one] (http://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc)이 속임수로 간주되는지 확실하지 않습니다. 나는 사람들이 전에도이 문제를 안고 있음을 안다. – chris

답변

5

예, gcc 대신 C++를 컴파일 할 g++을 사용해야 g ++ 대신 GCC의 사용이 필요하지만, 당신이 컴파일러를 사용하여 새 왔다고 때문에 아마 대답에 정교하게 가치 .

GCC는 GNU Compiler Collection의 약자이며 다양한 언어의 소스 코드를 컴파일하는 데 사용할 수있는 프로그램 모음입니다. gcc 명령은 사용자가 프로그램을 컴파일 할 수 있도록 외부 인터페이스를 제공합니다. gcc 명령은 원본 파일의 파일 확장명에서 컴파일 할 언어를 결정하려고 시도합니다. 예를 들어 hello.c이라는 파일은 C로 컴파일되고 foo.cpp이라는 파일은 C++로 컴파일되며 bar.m이라는 파일은 Objective-C로 컴파일됩니다.

파일 확장자에 관계없이 컴파일 할 언어를 명시 적으로 지정하기 위해 -x 옵션을 지정할 수 있습니다. 예를 들어, gcc -x c++ main.c.c 확장자를 가지고 있음에도 불구하고 main.c을 C++ 파일로 컴파일합니다.

그러나 gcc이 파일이 C++임을 확인하더라도 기본적으로 C++ 표준 라이브러리에 연결되지 않습니다. 이 라이브러리는 가장 간단한 C++ 파일 이외의 파일을 컴파일하기 위해 링크되어야합니다. 옵션에 -lstdc++을 추가하여 표준 라이브러리의 GCC 구현에 연결할 수 있습니다. 그래서 gcc -lstdc++ prog2.cpp 잘 작동합니다.

그러나 편의상 C++ 프로그래머를위한 또 다른 명령이 제공됩니다. 즉, g++. g++ 명령은 자동으로 C++ 표준 라이브러리에 연결되므로 명시 적으로 수행 할 필요가 없습니다. 또한 .c, .h.i 파일을 C++ 파일로 처리합니다.

C 컴파일 및 g++의 경우 일관되게 gcc을 사용하는 경우 아무 문제가 없습니다.