我剛剛在我的Ubuntu上發現,有兩種不同的C++編譯器:/ usr/bin/g ++和/ usr/bin/C++。我不熟悉後者,但man C++只是跳轉到gcc的manpage。我不知道它們與C++編譯器有什麼不同?「g ++」和「C++」編譯器
感謝和問候!
我剛剛在我的Ubuntu上發現,有兩種不同的C++編譯器:/ usr/bin/g ++和/ usr/bin/C++。我不熟悉後者,但man C++只是跳轉到gcc的manpage。我不知道它們與C++編譯器有什麼不同?「g ++」和「C++」編譯器
感謝和問候!
這是典型的Ubuntu符號鏈接混亂。
如果你ls -l /usr/bin/c++
,你會看到它實際上是一個符號鏈接。於:
/etc/alternatives/c++
這反過來也是一個符號鏈接:
/usr/bin/g++
所以,在Ubuntu系統中,C++ 是克++。鏈接間接的原因在於有多個包可以提供C++編譯器(比如不同版本的g ++)。你會在Ubuntu上看到很多。例如,qmake是到/ etc/alternatives中的文件的鏈接,這是(在我的系統上)返回到/ usr/bin/qmake-qt3的鏈接。
, usr/bin/C++和/ usr/bin/g ++都是二進制文件(即不是符號鏈接)......但這兩個文件是相同的(相同的字節數和相同的md5sum)。 (符號鏈接似乎更合適...不知道他們爲什麼做了同一個文件的副本。 g ++和C++都由相同的rpm'gcc-C++'提供。) – 2015-10-07 12:37:07
在我的機器,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的克隆。
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++
至少調用相同的編譯器,但理論上可以有不同的解釋一些命令行選項,或者有一些不同的默認值。有更多知識的人可以自由地延伸這方面的答案。
謝謝我檢查C++和g ++的md5sum,它們是一樣的!但是這裏有兩個文件做同樣的工作? – Arseniy 2012-06-27 08:54:56
是的,沒有區別,你可以使用任何你喜歡的。如果你在你的版本中使用GCC特定的選項,那麼我會推薦'g ++',但是你應該總是讓用戶用'CXX'變量覆蓋編譯器。 – ams 2012-06-27 09:00:44
即使這些文件是相同的,但並不意味着它們是相同的。一個程序的行爲可能會有所不同,具體取決於用什麼名稱來調用它(例如'gunzip'和'zcat'鏈接到'gzip',並且在用其他兩個名稱調用'gzip'時使用不同的默認參數)。 – Claudio 2012-06-27 09:34:51
'cc'和'C++'是POSIX編譯器的名稱。更可能的是,'C++'將成爲'g ++'的符號鏈接,'cc'成爲'gcc'的符號鏈接。 – 2012-06-27 08:50:56
Fedora 21上可能有[g ++和gcc有什麼不同?](https://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc) – 2017-09-11 20:02:38