&引用;g++&引用;及;c++&引用;编译程序 我在Ubuntu上发现,有两种不同的C++编译器: /Ur/bin /g++< /> >和 /Ur/bin /C++ +/>代码>。我不熟悉后者,但是manc++只是跳转到gcc的主页。我想知道它们在C++机器上的区别是什么?< /p>

&引用;g++&引用;及;c++&引用;编译程序 我在Ubuntu上发现,有两种不同的C++编译器: /Ur/bin /g++< /> >和 /Ur/bin /C++ +/>代码>。我不熟悉后者,但是manc++只是跳转到gcc的主页。我想知道它们在C++机器上的区别是什么?< /p>,c++,compiler-construction,ubuntu,g++,C++,Compiler Construction,Ubuntu,G++,在我的机器上, C++ >代码>是一个链接: $ readlink /usr/bin/c++ /etc/alternatives/c++ $ readlink /etc/alternatives/c++ /usr/bin/g++ 所以c++只是指向g++的链接,这是典型的Ubuntu符号链接混乱 如果您ls-l/usr/bin/c++,您将看到它实际上是一个符号链接。致: /etc/alternatives/c++ 这反过来也是一个符号链接,指向: /usr/bin/g++ 在Ubuntu

在我的机器上,<代码> C++ >代码>是一个链接:

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

所以
c++
只是指向
g++

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

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

/etc/alternatives/c++
这反过来也是一个符号链接,指向:

/usr/bin/g++

在Ubuntu系统上,C++是G++。链接间接的原因是有多个包可以提供C++编译器(例如G+的不同版本)。你会在Ubuntu上看到很多。例如,QPoT是一个链接到/ETC/C++的文件,它是(在我的系统上)链接到/Ur/bin /QMAK-QT3。

C++ C++是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++
至少调用同一个编译器,但理论上它可以对某些命令行选项进行不同的解释,或者具有不同的默认值。有更多知识的人可以自由扩展这方面的答案。

cc
c++
是POSIX编译器的名称。更可能的是,代码> C++ >代码> >代码> >代码> >代码> GCC < /代码>。但是,这两个文件做相同的工作是什么呢?是的,没有区别,你可以使用任何你喜欢的。如果您在构建中使用特定于GCC的选项,那么我建议您使用
g++
,这一点很清楚,但是您应该始终让用户使用
CXX
变量重写编译器。即使文件相同,也不意味着它们是等效的。根据调用程序的名称不同,程序可能会有不同的行为(例如,
gunzip
zcat
是指向
gzip
的链接,当用另外两个名称调用
gzip
时,会使用不同的默认参数)。@Claudio,哦,对了,忘了这一点。“那么这可能不仅是不精确的答案,而且是完全错误的。”克劳迪奥,在BSD系统上,这几乎肯定是错误的。我现在很困惑,我必须修改答案。在Fedora21上,/usr/bin/c++和/usr/bin/g++都是二进制文件(即不是符号链接)。。。但这两个文件是相同的(相同的字节数和相同的md5sum)。(一个SyLink似乎更合适……不知道他们为什么做了同一个文件的拷贝。G++和C++都由同一个RPM <代码> GCC-C++< /COD>提供。