当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

我刚在Ubuntu上发现,有两种不同的C++编译器:/usr /bin /g ++和/usr /bin /c ++。我对后者不熟悉,但是man c ++只是跳转到gcc的联机帮助页。我想知道它们与C++编译器有什么区别?

最佳答案

这是典型的Ubuntu symlink混乱。

如果您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-compatible,他们也将此编译器安装为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克隆。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8813.html,未经允许,请勿转载。