我刚刚在我的Ubuntu上发现,有两种不同的C++编译器:/ usr/bin/g ++和/ usr/bin/C++。我不熟悉后者,但man C++只是跳转到gcc的manpage。我不知道它们与C++编译器有什么不同?“g ++”和“C++”编译器
感谢和问候!
我刚刚在我的Ubuntu上发现,有两种不同的C++编译器:/ usr/bin/g ++和/ usr/bin/C++。我不熟悉后者,但man C++只是跳转到gcc的manpage。我不知道它们与C++编译器有什么不同?“g ++”和“C++”编译器
感谢和问候!
这是典型的Ubuntu符号链接混乱。
如果你ls -l /usr/bin/c++
,你会看到它实际上是一个符号链接。于:
/etc/alternatives/c++
这反过来也是一个符号链接:
/usr/bin/g++
所以,在Ubuntu系统中,C++ 是克++。链接间接的原因在于有多个包可以提供C++编译器(比如不同版本的g ++)。你会在Ubuntu上看到很多。例如,qmake是到/ etc/alternatives中的文件的链接,这是(在我的系统上)返回到/ usr/bin/qmake-qt3的链接。
, usr/bin/C++和/ usr/bin/g ++都是二进制文件(即不是符号链接)......但这两个文件是相同的(相同的字节数和相同的md5sum)。 (符号链接似乎更合适...不知道他们为什么做了同一个文件的副本。 g ++和C++都由相同的rpm'gcc-C++'提供。) – 2015-10-07 12:37:07
在我的机器,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的克隆。
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++
至少调用相同的编译器,但理论上可以有不同的解释一些命令行选项,或者有一些不同的默认值。有更多知识的人可以自由地延伸这方面的答案。
谢谢我检查C++和g ++的md5sum,它们是一样的!但是这里有两个文件做同样的工作? – Arseniy 2012-06-27 08:54:56
是的,没有区别,你可以使用任何你喜欢的。如果你在你的版本中使用GCC特定的选项,那么我会推荐'g ++',但是你应该总是让用户用'CXX'变量覆盖编译器。 – ams 2012-06-27 09:00:44
即使这些文件是相同的,但并不意味着它们是相同的。一个程序的行为可能会有所不同,具体取决于用什么名称来调用它(例如'gunzip'和'zcat'链接到'gzip',并且在用其他两个名称调用'gzip'时使用不同的默认参数)。 – Claudio 2012-06-27 09:34:51
'cc'和'C++'是POSIX编译器的名称。更可能的是,'C++'将成为'g ++'的符号链接,'cc'成为'gcc'的符号链接。 – 2012-06-27 08:50:56
Fedora 21上可能有[g ++和gcc有什么不同?](https://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc) – 2017-09-11 20:02:38