我刚刚在我的Ubuntu操作系统上发现了两个不同的C++编译器: /usr/bin/g++
和 /usr/bin/c++
。我不熟悉后者,但是输入man c++
命令只会跳转到gcc的手册页。我想知道这两个编译器在C++编译方面有什么区别?
我刚刚在我的Ubuntu操作系统上发现了两个不同的C++编译器: /usr/bin/g++
和 /usr/bin/c++
。我不熟悉后者,但是输入man c++
命令只会跳转到gcc的手册页。我想知道这两个编译器在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++
('g'代表GNU)的C++
编译器。但为了与POSIX兼容,它们也将此编译器安装为c++
,有时c++
是指向g++
的符号链接,有时是硬链接,有时只是安装两次相同的文件。
但对于其他系统(如FreeBSD或NetBSD),情况可能不是这样。这些系统可能没有安装GCC(和其他GNU工具)。
在我的系统上,这两个文件完全相同:
% diff `which c++` `which g++`
% echo $?
0
这意味着c ++
至少调用相同的编译器,但在理论上它可以以不同的方式解释某些命令行选项或具有一些不同的默认值。更了解此问题的人可以自由地扩展答案。
g++
,这样就清楚明确了,但你应该始终让用户通过CXX
变量覆盖编译器。 - amsgunzip
和zcat
都链接到gzip
,当使用其他两个名称调用gzip
时会使用不同的默认参数)。 - Claudioc++
是一个链接:$ readlink /usr/bin/c++
/etc/alternatives/c++
$ readlink /etc/alternatives/c++
/usr/bin/g++
所以只是指向的链接。g++是GNU C++编译器,其中C++是系统自带的C++编译器,在Ubuntu中C++链接到g++,但在其他系统中它可能链接到非GCC编译器。另外,就像有人说的vi vs vim,仅仅因为系统上存在对vi的链接并不意味着它是vim,可能是任何一个vi克隆版。
cc
和c++
是 POSIX 编译器的名称。很可能,c++
会是指向g++
的符号链接,而cc
则是指向gcc
的。 - Cat Plus Plus