web-dev-qa-db-ja.com

「g ++」および「c ++」コンパイラ

私はちょうど私のUbuntuで見つけた、2つの異なるC++コンパイラがあります:/ usr/bin/g ++と/ usr/bin/c ++。私は後者には詳しくありませんが、man c ++はgccのマンページにジャンプします。 C++コンパイラとしての違いは何でしょうか。

50
Tim

これは典型的なUbuntuのsymlink騒乱です。

もし、あんたが ls -l /usr/bin/c++、実際にはシンボリックリンクであることがわかります。に:

/etc/alternatives/c++

これは、次へのシンボリックリンクでもあります。

/usr/bin/g++

したがって、Ubuntuシステムでは、c ++ is g ++です。リンクの間接化の背後にある理由は、c ++コンパイラー(異なるバージョンのg ++​​など)を提供できるパッケージが複数あるためです。これはUbuntuでよく見られます。たとえば、qmakeは/ etc/alternatives内のファイルへのリンクであり、これは(私のシステムでは)/ usr/bin/qmake-qt3へのリンクです。

55
MichaelM

c++は、システム上のC++コンパイラの標準名です。

GNUシステムでは、ほぼ確実にGCC(GNUコンパイラコレクション)がインストールされており、これにはC++という名前のg++コンパイラが含まれています( 'g' for GNU)。ただし、POSIX互換であるために、このコンパイラはc++としてインストールされることもあります。c++は、g++へのシンボリックリンクである場合もあれば、ハードリンクである場合もあります。 2回インストールされます。

これは、FreeBSDやNetBSDのような他のシステムには当てはまりません。これらのシステムにはGCC(および他のGNUもの))がインストールされていない可能性があります。

私のシステムでは、これらの2つのファイルはまったく同じです。

% diff `which c++` `which g++`
% echo $?
0

つまり、c++は少なくとも同じコンパイラを起動しますが、理論的には、いくつかのコマンドラインオプションを異なる方法で解釈したり、デフォルトを変更したりできます。より多くの知識を持つ人は、この点で答えを自由に拡張できます。

28
unkulunkulu

私のマシンでは、c++はリンクです:

$ readlink /usr/bin/c++
/etc/alternatives/c++
$ readlink /etc/alternatives/c++
/usr/bin/g++

したがって、c++g++へのリンクにすぎません。

11
Sophie Alpert

g ++はgnu c ++コンパイラで、c ++はシステムのc ++コンパイラです。ubuntuの場合、C++はg ++へのリンクですが、別のシステムでは、非gccコンパイラへのリンクである可能性があります。他の誰かがvi vs vimと言ったように。システムへのviへのリンクが存在するからといって、それがvimが任意のviクローンである可能性があるという意味ではありません。

3
xenoterracide