"g ++"和"c ++"编译器

Tim*_*Tim 50 c++ compiler-construction ubuntu g++

我刚刚在我的Ubuntu上找到了两个不同的C++编译器:/ usr/bin/g ++和/ usr/bin/c ++.我不熟悉后者,但是man c ++只是跳到了gcc的联机帮助页面.我想知道它们作为C++编译器的区别是什么?

感谢致敬!

Mic*_*elM 55

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

如果你ls -l /usr/bin/c++,你会发现它实际上是一个象征性的链接.至:

/etc/alternatives/c++
Run Code Online (Sandbox Code Playgroud)

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

/usr/bin/g++
Run Code Online (Sandbox Code Playgroud)

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

  • 在Fedora 21上,/ usr/bin/c ++和/ usr/bin/g ++都是二进制文件(即不是符号链接)......但是这两个文件是相同的(相同的字节数和相同的md5sum).(符号链接似乎更合适......不确定为什么他们会复制同一个文件.g ++和c ++都是由相同的rpm`gcc-c ++`提供的.) (2认同)

unk*_*ulu 28

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

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

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

在我的系统上,这两个文件完全相同:

% diff `which c++` `which g++`
% echo $?
0
Run Code Online (Sandbox Code Playgroud)

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

  • 即使文件相同,也不代表它们是等价的.程序的行为可能会有所不同,具体取决于用来调用它的名称(例如`gunzip`和`zcat`是指向`gzip`的链接,当使用其他两个名称调用`gzip`时使用不同的默认参数). (2认同)

Sop*_*ert 11

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

$ readlink /usr/bin/c++
/etc/alternatives/c++
$ readlink /etc/alternatives/c++
/usr/bin/g++
Run Code Online (Sandbox Code Playgroud)

所以c++只是一个链接g++.


xen*_*ide 5

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