问题描述
我刚在Ubuntu上发现,有两种不同的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 ++是g ++。链接间接寻址背后的原因是,有多个软件包可以提供c ++编译器(例如g ++的不同版本)。您会在Ubuntu上看到很多。例如,qmake是/etc /alternatives中文件的链接,(在我的系统上)是/usr /bin /qmake-qt3的链接。
次佳答案
c++
是系统上C++
编译器的标准名称。
在GNU系统上,几乎可以肯定安装了GCC
(GNU编译器集合),其中包括一个名为g++
的C++
编译器(对于GNU为’g’)。但是要成为POSIX-compatible,他们也将此编译器安装为c++
,有时c++
是指向g++
的符号链接,有时是硬链接,有时是两次安装的同一文件。
对于其他系统,例如FreeBSD或NetBSD,则不是这种情况。这些系统可能没有安装GCC(和其他GNU东西)。
在我的系统上,这两个文件是完全相同的:
% 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克隆。