4

Possible Duplicate:
GCC linker can’t find standard library?

I am trying to mess with this C++ book I got for the holidays, I am coming from a limited understanding of python so this stuff is real strange to me.

I typed out this code from one of the first lessons into my text editor and saved it as a .cpp file.

#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;
}

but my terminal gives this crazy output when i try to compile it, whats going on?

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

2 に答える 2

5

はい、のg++代わりにC ++のコンパイルに使用する必要gccがありますが、コンパイラを使用するのは初めてだと言うので、答えを詳しく説明する価値があります。

GCCはGNUコンパイラコレクションの略で、さまざまな言語のソースコードをコンパイルするために使用できるプログラムのコレクションです。このコマンドgccは、ユーザーがプログラムをコンパイルするための外部インターフェイスを提供します。このgccコマンドは、ソースファイルのファイル拡張子からコンパイルする言語を決定しようとします。たとえば、という名前のファイルhello.cはCとしてコンパイルされ、という名前のファイルfoo.cppはC ++としてコンパイルされ、という名前のファイルはbar.mObjective-Cとしてコンパイルされます。

-xファイル拡張子に関係なく、コンパイルする言語を明示的に指定するオプションを指定できます。たとえば、拡張子が付いていても、C++ファイルとしてgcc -x c++ main.cコンパイルされます。main.c.c

ただし、gccファイルがC ++であると判断されたとしても、デフォルトではC++標準ライブラリにリンクされません。このライブラリは、最も単純なC++ファイル以外のものをコンパイルするためにリンクする必要があります。オプションに追加することで、標準ライブラリのGCC実装にリンクでき-lstdc++ます。だからgcc -lstdc++ prog2.cppうまくいくはずです。

ただし、便宜上、C++プログラマー向けに別のコマンドが用意されています。つまり、g++。コマンドは自動的にC++標準ライブラリにリンクするため、g++明示的に行う必要はありません。また、、.cおよび.hファイル.iがC++ファイルとして扱われるようになります。

gccCとをコンパイルすることに一貫して固執する場合g++は、問題はないはずです。

于 2012-12-27T20:14:57.333 に答える
1

gccの代わりにg++を使用する必要があります

于 2012-12-27T19:48:15.263 に答える