2009-11-11 118 views
35

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

感谢和问候!

+4

'cc'和'C++'是POSIX编译器的名称。更可能的是,'C++'将成为'g ++'的符号链接,'cc'成为'gcc'的符号链接。 – 2012-06-27 08:50:56

+0

Fedora 21上可能有[g ++和gcc有什么不同?](https://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc) – 2017-09-11 20:02:38

回答

42

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

如果你ls -l /usr/bin/c++,你会看到它实际上是一个符号链接。于:

/etc/alternatives/c++ 

这反过来也是一个符号链接:

/usr/bin/g++ 

所以,在Ubuntu系统中,C++ 克++。链接间接的原因在于有多个包可以提供C++编译器(比如不同版本的g ++)。你会在Ubuntu上看到很多。例如,qmake是到/ etc/alternatives中的文件的链接,这是(在我的系统上)返回到/ usr/bin/qmake-qt3的链接。

+1

, usr/bin/C++和/ usr/bin/g ++都是二进制文件(即不是符号链接)......但这两个文件是相同的(相同的字节数和相同的md5sum)。 (符号链接似乎更合适...不知道他们为什么做了同一个文件的副本。 g ++和C++都由相同的rpm'gcc-C++'提供。) – 2015-10-07 12:37:07

11

在我的机器,c++是链接:

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

所以c++只是一种g++链接。

3

g ++是gnu C++编译器,其中C++是系统C++编译器,在ubuntu的情况下C++是g ++的链接,但是在另一个系统中它可能是非gcc编译器的链接。正如别人所说的vi vs vim。只是因为在系统上存在一个到vi的链接并不意味着它是vim可以是任何vi的克隆。

23

c++是系统上编译器C++的标准名称。

上安装GNU系统,你几乎可以肯定有GCC(GNU编译器),其中包括一个名为g++( 'G' 为GNU)一个C++编译器。但是为了兼容POSIX,他们也安装这个编译器,因为c++也有,有时c++g++的符号链接,有时它是一个硬链接,有时它只是安装两次相同的文件。

对于像FreeBSD或NetBSD等其他系统,情况并非如此。这些系统可能没有安装GCC(和其他GNU的东西)。

在我的系统这两个文件都只是相同的:

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

这意味着c++至少调用相同的编译器,但理论上可以有不同的解释一些命令行选项,或者有一些不同的默认值。有更多知识的人可以自由地延伸这方面的答案。

+1

谢谢我检查C++和g ++的md5sum,它们是一样的!但是这里有两个文件做同样的工作? – Arseniy 2012-06-27 08:54:56

+0

是的,没有区别,你可以使用任何你喜欢的。如果你在你的版本中使用GCC特定的选项,那么我会推荐'g ++',但是你应该总是让用户用'CXX'变量覆盖编译器。 – ams 2012-06-27 09:00:44

+2

即使这些文件是相同的,但并不意味着它们是相同的。一个程序的行为可能会有所不同,具体取决于用什么名称来调用它(例如'gunzip'和'zcat'链接到'gzip',并且在用其他两个名称调用'gzip'时使用不同的默认参数)。 – Claudio 2012-06-27 09:34:51