2009-11-11 2 views
35

Я только что нашел на своем Ubuntu два разных компилятора C++:/usr/bin/g ++ и/usr/bin/C++. Я не знаком с последним, но человек C++ просто перескакивает на man-страницу gcc. Интересно, в чем их отличие как компиляторы C++?Компилятор «g ++» и «C++»

Спасибо и приветствую!

+4

'cc' и' C++ '- это имена компиляторов POSIX. Скорее всего, 'C++' будет символической ссылкой на 'g ++' и 'cc' на' gcc'. –

+0

Возможный дубликат [В чем разница между g ++ и gcc?] (Https://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc) –

ответ

42

Это типичная символьная ссылка Ubuntu.

Если вы ls -l /usr/bin/c++, вы увидите, что это на самом деле символическая ссылка. чтобы:

/etc/alternatives/c++ 

Который, в свою очередь, также является символической ссылкой на:

/usr/bin/g++ 

Так, в системах Ubuntu, с ++ является г ++. Обоснование ссылки на ссылку - это несколько пакетов, которые могут предоставить компилятор C++ (например, разные версии g ++). Вы увидите это на Ubuntu. Например, qmake - это ссылка на файл в/etc/alternatives, который (в моей системе) ссылается на/usr/bin/qmake-qt3.

+1

на Fedora 21,/usr/bin/C++ и/usr/bin/g ++ - это двоичные файлы (т. е. не символические ссылки) ... но оба файла идентичны (одинаковое количество байтов и одно и то же md5sum). (Символьная ссылка кажется более подходящей ...не знаю, почему они сделали копию того же файла. Оба g ++ и C++ предоставляются одним и тем же rpm 'gcc-C++'.) –

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 ++, однако в другой системе это вполне может быть ссылкой на компилятор non gcc. как кто-то сказал vi vs vim. просто потому, что ссылка на vi существует в системе, не означает, что vim может быть любым vi clone.

23

c++ является стандартным именем компилятора C++ на системе.

В системе GNU вы почти наверняка GCC (коллекция компиляторов GNU) установлен, который включает в себя компилятор C++ с именем g++ («г» для GNU). Но для совместимости с POSIX они устанавливают этот компилятор также как c++, иногда c++ - это символическая ссылка на g++, иногда это жесткая ссылка, иногда это тот же самый файл, установленный дважды.

Этого не может быть в случае других систем, таких как FreeBSD или NetBSD. Возможно, что в этих системах нет GCC (и других материалов GNU).

В моей системе эти два файла просто идентичны:

% diff `which c++` `which g++` 
% echo $? 
0 

Это означает, что c++ по крайней мере, вызывает тот же компилятор, но теоретически он может интерпретировать некоторые параметры командной строки по-разному или имеют различные значения по умолчанию. Кто-то, у кого больше знаний, может свободно ответить на этот вопрос.

+1

спасибо, я проверяю md5sum C++ и g ++, и они такие же! Но зачем здесь 2 файла, которые делают такую ​​же работу? – Arseniy

+0

Да, нет никакой разницы, и вы можете использовать то, что вам нравится. Если вы используете специальные настройки GCC в своей сборке, я бы рекомендовал «g ++», просто так ясно, но вы всегда должны позволять пользователю переопределять компилятор с помощью переменной 'CXX'. – ams

+2

Даже если файлы идентичны, это не значит, что они эквивалентны. Программа может вести себя по-разному в зависимости от того, какое имя было использовано для ее вызова (например, 'gunzip' и' zcat' являются ссылкой на 'gzip', а разные аргументы по умолчанию используются, когда' gzip' вызывается с двумя другими именами). – Claudio

Смежные вопросы