9

私はUbuntuでコンパイルしようとしていました。だから私はこれほど小さなプログラムを入力しました:

#include <iostream>
using namespace std;
int main(){
int cases;
cin>>cases;
return 0;
}

そして、これは多くのエラーを引き起こします:

umair@ubuntu:~/cpp$ gcc -Wall -W -Werror 2.cpp -o 1
/tmp/ccU4nAIg.o: In function `main':
2.cpp:(.text+0x10): undefined reference to `std::cin'
2.cpp:(.text+0x15): undefined reference to `std::istream::operator>>(int&)'
/tmp/ccU4nAIg.o: In function `__static_initialization_and_destruction_0(int, int)':
2.cpp:(.text+0x4d): undefined reference to `std::ios_base::Init::Init()'
2.cpp:(.text+0x5c): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccU4nAIg.o:(.eh_frame+0x13): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status

これは "C" で簡単に実行できます。しかし、「C++」での私の間違いは何ですか?

4

2 に答える 2

21

C++ プログラムをビルドするg++代わりに使用します。gcc

は C++ のコンパイル方法をgcc知っていますが、デフォルトでは、プログラムに必要な C++ ライブラリに対してリンクしません。

マニュアルから:

C++ プログラムのコンパイル

       C++ ソース ファイルは、通常、.C、.cc、.cpp、.CPP、.CPP のいずれかのサフィックスを使用します。
       .c++、.cp、または .cxx; C++ ヘッダー ファイルは、多くの場合、.hh または .H を使用します。および前処理された C++
       ファイルは接尾辞 .ii を使用します。GCC はこれらの名前のファイルを認識してコンパイルします
       と同じ方法でコンパイラを呼び出しても、C++ プログラムとしてそれらを
       C プログラムのコンパイル (通常は gcc という名前)。

       ただし、gcc を使用しても C++ ライブラリは追加されません。g++ は、
       GCC を呼び出し、.c、.h、および .i ファイルを C ではなく C++ ソース ファイルとして扱います。
       -x が使用されない限り、ソース ファイルにリンクし、自動的にソース ファイルに対するリンクを指定します。
       C++ ライブラリ。このプログラムは、C ヘッダー ファイルをプリコンパイルする場合にも役立ちます。
       C++ コンパイルで使用するための .h 拡張子を付けます。多くのシステムでは、g++ も
       c++ という名前でインストールされます。
于 2013-03-30T10:17:26.373 に答える
8

C++ をコンパイルするには、g++代わりに を呼び出しますgcc

于 2013-03-30T10:17:57.407 に答える