web-dev-qa-db-ja.com

gccを使用したC ++プログラムのコンパイル

質問:gccコンパイラでC++プログラムをコンパイルする方法は?

info.c:

#include<iostream>
using std::cout;
using std::endl;
int main()
{
   #ifdef __cplusplus
   cout << "C++ compiler in use and version is " << __cplusplus << endl;
   #endif
   cout <<"Version is " << __STDC_VERSION__ << endl;
   cout << "Hi" << __FILE__ << __LINE__ << endl;
}

info.cをコンパイルしようとすると

$ gcc info.C

Undefined                       first referenced
 symbol                             in file
cout                                /var/tmp/ccPxLN2a.o
endl(ostream &)                     /var/tmp/ccPxLN2a.o
ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccPxLN2a.o
ostream::operator<<(int)            /var/tmp/ccPxLN2a.o
ostream::operator<<(long)           /var/tmp/ccPxLN2a.o
ostream::operator<<(char const *)   /var/tmp/ccPxLN2a.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status

gccコンパイラはC++プログラムをコンパイルできませんか?関連する注意事項として、gccとg ++の違いは何ですか。ありがとう、

62
xyz

gccは実際にC++コードを問題なくコンパイルできます。受け取ったエラーはlinkerエラーであり、コンパイラエラーではありません。

オッズは、コンパイル行を次のように変更すると:

gcc info.C -lstdc++

これにより、標準のC++ライブラリにリンクされ、正常に機能します。

ただし、あなたの人生をより簡単にし、g ++を使用する必要があります。


編集:

Rup は、別の答えに対して 彼のコメント で最も良いと言っています:

[...] gccは、ファイル拡張子に基づいて正しいバックエンドコンパイラを選択し(つまり、.cをCとして、.ccをC++としてコンパイルします)、デフォルトに関係なく、標準CおよびGCCヘルパーライブラリのみに対してバイナリをリンクします。入力言語; g ++は、拡張子に基づいて正しいバックエンドも選択しますが、すべてのCソースを代わりにC++としてコンパイルします(つまり、.cと.ccの両方をC++としてコンパイルします)。入力言語に関係なく、リンクステップにlibstdc ++を含めます。

107
Evan Teran

コードに.c拡張子を付けると、コンパイラはそれをC++ではなくCコードと見なします。また、C++コンパイラドライバーはg ++と呼ばれます。gccドライバーを使用すると、リンカーの問題が発生します。標準のC++ライブラリはデフォルトではリンクされないためです。あなたが望んでいるのは:

g++ myprog.cpp

また、コードを移植したくない場合を除き、大文字の.C拡張子を使用することも検討しないでください。

40
anon

gccの代わりにg++を使用します。

19
Alexandre C.

Gccとg ++の違いは次のとおりです。

     gcc            |        g++
compiles c source   |   compiles c++ source

c ++ソースをコンパイルするには、gccではなくg ++を使用します。

10
Praveen S

デフォルトでは、gccはファイル拡張子に基づいて言語を選択しますが、-xオプションを使用してgccに別の言語バックエンドを強制的に選択させることができます。

gcc -x c++

その他のオプションについては、gccのマニュアルページの「出力の種類を制御するオプション」を参照してください。例参照 http://linux.die.net/man/1/gcc (テキスト-x languageをページで検索)。

この機能は、gccがファイル拡張子を使用して言語を推測できない場合、たとえば、コードを生成してstdin経由でgccに供給する場合に非常に便利です。

7
bleater

私にとってはうまくいきました。 cmdの1行のコード。

最初に、gcc(cの場合)またはg ++(c ++の場合)コンパイラがインストールされていることを確認します。

Gccタイプのcmdで:

gcc --version

g ++タイプのcmd:

g ++ --version

インストールされている場合は続行します。

次に、cmdを使用して.cまたは.cppをコンパイルします

。c構文の場合:

gcc -o exe_filename yourfilename.c

例:

gcc -o myfile myfile.c

ここでexe_filename(例ではmyfile)。exeファイルの名前です。これはコンパイル後に生成します(注:ここには拡張子を付けていません)。 yourfilename.c(例ではmyfile.c)は、ソースファイルで、拡張子は.cです。

ここで、.cファイルを含むフォルダーに移動します。ここで、拡張子が.exeのファイルが見つかります。開けて万歳.

。cpp構文の場合:

g ++ -o exe_filename yourfilename.cpp

その後、プロセスは.cの場合と同じです。

2
Rajkumar Bansal

正しく思い出せば、gccはサフィックスからファイルタイプを判別します。したがって、foo.ccにすると、動作するはずです。

そして、他の質問に答えるために、thatは「gcc」と「g ++」の違いです。 gccは、正しいコンパイラを選択するフロントエンドです。

1
Borealid