“g ++”和“c ++”编译器

我刚才在我的Ubuntu上发现,有两个不同的C ++编译器:/ usr / bin / g ++和/ usr / bin / c ++。 我不熟悉后者,但是man c ++只是跳转到gcc的manpage。 我不知道它们与C ++编译器有什么不同?

感谢致敬!

这是典型的Ubuntu符号链接混乱。

如果你使用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,他们也把这个编译器作为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的克隆。