2009-11-11 152 views
35

我剛剛在我的Ubuntu上發現,有兩種不同的C++編譯器:/ usr/bin/g ++和/ usr/bin/C++。我不熟悉後者,但man C++只是跳轉到gcc的manpage。我不知道它們與C++編譯器有什麼不同?「g ++」和「C++」編譯器

感謝和問候!

+4

'cc'和'C++'是POSIX編譯器的名稱。更可能的是,'C++'將成爲'g ++'的符號鏈接,'cc'成爲'gcc'的符號鏈接。 – 2012-06-27 08:50:56

+0

Fedora 21上可能有[g ++和gcc有什麼不同?](https://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc) – 2017-09-11 20:02:38

回答

42

這是典型的Ubuntu符號鏈接混亂。

如果你ls -l /usr/bin/c++,你會看到它實際上是一個符號鏈接。於:

/etc/alternatives/c++ 

這反過來也是一個符號鏈接:

/usr/bin/g++ 

所以,在Ubuntu系統中,C++ 克++。鏈接間接的原因在於有多個包可以提供C++編譯器(比如不同版本的g ++)。你會在Ubuntu上看到很多。例如,qmake是到/ etc/alternatives中的文件的鏈接,這是(在我的系統上)返回到/ usr/bin/qmake-qt3的鏈接。

+1

, usr/bin/C++和/ usr/bin/g ++都是二進制文件(即不是符號鏈接)......但這兩個文件是相同的(相同的字節數和相同的md5sum)。 (符號鏈接似乎更合適...不知道他們爲什麼做了同一個文件的副本。 g ++和C++都由相同的rpm'gcc-C++'提供。) – 2015-10-07 12:37:07

11

在我的機器,c++是鏈接:

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

所以c++只是一種g++鏈接。

3

g ++是gnu C++編譯器,其中C++是系統C++編譯器,在ubuntu的情況下C++是g ++的鏈接,但是在另一個系統中它可能是非gcc編譯器的鏈接。正如別人所說的vi vs vim。只是因爲在系統上存在一個到vi的鏈接並不意味着它是vim可以是任何vi的克隆。

23

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++至少調用相同的編譯器,但理論上可以有不同的解釋一些命令行選項,或者有一些不同的默認值。有更多知識的人可以自由地延伸這方面的答案。

+1

謝謝我檢查C++和g ++的md5sum,它們是一樣的!但是這裏有兩個文件做同樣的工作? – Arseniy 2012-06-27 08:54:56

+0

是的,沒有區別,你可以使用任何你喜歡的。如果你在你的版本中使用GCC特定的選項,那麼我會推薦'g ++',但是你應該總是讓用戶用'CXX'變量覆蓋編譯器。 – ams 2012-06-27 09:00:44

+2

即使這些文件是相同的,但並不意味着它們是相同的。一個程序的行爲可能會有所不同,具體取決於用什麼名稱來調用它(例如'gunzip'和'zcat'鏈接到'gzip',並且在用其他兩個名稱調用'gzip'時使用不同的默認參數)。 – Claudio 2012-06-27 09:34:51