it-swarm-ja.com

g ++とは正確には何ですか?

私が理解していないことが1つあります-それは質問ですg ++とは何ですか?

私はワイドウェブを検索しました(少なくとも私が考えたあらゆる方法で)。結果は得られませんでした(私がg ++とは何かに最も近いのは、 this です)。

では、g ++はGCCコンパイラ用に設計されたライブラリですか(またはコンパイラ自体ですか)?私はタイプすることによってそれを知っています

$Sudo apt-get install g++

debianベースのシステムではg ++がインストールされます。しかし今、私はg ++が何であるかについてかなり混乱しています。それで、それはC++ライブラリまたはコンパイラ自体ですか?私の知る限り、Googleでg ++を検索しても(他の検索エンジンにも賭けます)、役立つ結果は返されません。

答えてくれてありがとう。

1
John Lee

gCCコンパイラ

ここでの混乱の原因の1つは、GCCには複数の意味があることです。具体的には、Cコンパイラー(「GNUCコンパイラー」)を指す場合もあれば、コンパイラーのコレクション全体(「GNUコンパイラーコレクション」)を指す場合もあります。


GNUコンパイラコレクションは、その名前が示すように、いくつかのコードを共有するコンパイラのコレクションであり、コレクションの中にはCコンパイラとC++コンパイラがあります。

「gcc」および「g ++」バイナリは「コンパイラドライバ」であり、コマンドラインの解析と、正しいオプションで実際の作業を行うプログラム(コンパイラ、リンカ、プリプロセッサ(統合されていない場合))の呼び出しを処理します。

実際のコンパイラは、Cの場合は「cc1」、C++の場合は「cc1plus」です。

「g ++」には、c ++に固有の追加の動作があり、そのままでc ++プログラムをコンパイルおよびリンクできます。詳細については、 https://stackoverflow.com/a/173007/5083516 を参照してください。


今度はDebianパッケージについてです。

Debianは、アーキテクチャプレフィックスとバージョンサフィックスが付いた「gcc」と「g ++」のバイナリに名前を付けます。たとえば、この投稿を書くために使用しているDebianシステムでは、「g ++」は「g ++-6」へのシンボリックリンクです。 turnはx86_64-linux-gnu-g ++-6へのシンボリックリンクです

Debianの「g ++」パッケージには実際にはコンパイラが含まれていません。バージョン管理されていない名前からバージョン管理された名前へのシンボリックリンクが含まれているだけで、(Debianストレッチでは)「cpp」、「g ++-6」、「gcc」、「 gcc-6 "(他のリリースではバージョン番号が異なります)。

Debianの「g ++ -6」パッケージには、g ++バージョン6.x(x86-64ではx86_64-linux-gnu-g ++-6という名前)とcc1plus(コンパイラのバージョンとターゲットに固有のディレクトリにあります)の実際のバイナリが含まれています。建築)。

「g ++-6」は「libstdc ++-6-dev」に依存します。これには、c ++標準ライブラリのヘッダー、C++標準ライブラリの静的バージョン、およびC++標準ライブラリの動的バージョンへのシンボリックリンクが含まれます(および異常な状況でのみ問題となる他の静的ライブラリのカップル)

「libstdc ++-6-dev」は、C++標準ライブラリの動的バージョンを含む「libstdc ++ 6」に依存します(libstdc ++-6-devの6とlibstdc ++ 6の6は異なるものを参照していることに注意してください) 、前者の場合はコンパイラのバージョンであり、後者の場合は標準Cライブラリのバージョンです)。

したがって、「g ++」パッケージをインストールすると、C++でプログラムを作成するために必要なすべてのものが取り込まれます。

2
plugwash