私はちょうど私のUbuntuで見つけた、2つの異なるC++コンパイラがあります:/ usr/bin/g ++と/ usr/bin/c ++。私は後者には詳しくありませんが、man c ++はgccのマンページにジャンプします。 C++コンパイラとしての違いは何でしょうか。
これは典型的な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へのリンクです。
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++
は少なくとも同じコンパイラを起動しますが、理論的には、いくつかのコマンドラインオプションを異なる方法で解釈したり、デフォルトを変更したりできます。より多くの知識を持つ人は、この点で答えを自由に拡張できます。
私のマシンでは、c++
はリンクです:
$ readlink /usr/bin/c++
/etc/alternatives/c++
$ readlink /etc/alternatives/c++
/usr/bin/g++
したがって、c++
はg++
へのリンクにすぎません。
g ++はgnu c ++コンパイラで、c ++はシステムのc ++コンパイラです。ubuntuの場合、C++はg ++へのリンクですが、別のシステムでは、非gccコンパイラへのリンクである可能性があります。他の誰かがvi vs vimと言ったように。システムへのviへのリンクが存在するからといって、それがvimが任意のviクローンである可能性があるという意味ではありません。