Je viens de découvrir sur mon Ubuntu, il existe deux compilateurs C++ différents:/usr/bin/g ++ et/usr/bin/c ++. Je ne connais pas ce dernier, mais man c ++ saute juste à la page de manuel de gcc. Je me demande quelle est leur différence en tant que compilateurs C++?
C'est le chaos typique des liens symboliques Ubuntu.
Si vous ls -l /usr/bin/c++
, vous verrez qu'il s'agit en fait d'un lien symbolique. à:
/etc/alternatives/c++
Ce qui, à son tour, est également un lien symbolique vers:
/usr/bin/g++
Donc, sur les systèmes Ubuntu, c ++ is g ++. Le raisonnement derrière l'indirection de lien est qu'il existe plusieurs packages qui pourraient fournir un compilateur c ++ (comme différentes versions de g ++). Vous le verrez beaucoup sur Ubuntu. Par exemple, qmake est un lien vers un fichier dans/etc/alternatives, qui est (sur mon système) un lien vers/usr/bin/qmake-qt3.
c++
est le nom standard d'un C++
compilateur sur un système.
Sur un système GNU vous avez presque sûrement GCC
(collection de compilateurs GNU) installé, qui comprend un C++
compilateur nommé g++
('g' pour GNU). Mais pour être compatible POSIX, ils installent ce compilateur en tant que c++
aussi, parfois c++
est un lien symbolique vers g++
parfois c'est un lien dur, parfois c'est juste le même fichier installé deux fois.
Cela ne peut pas être le cas pour d'autres systèmes comme FreeBSD ou NetBSD. Il est possible que ces systèmes n'aient pas GCC (et autres GNU stuff) installés).
Sur mon système, ces deux fichiers sont juste identiques:
% diff `which c++` `which g++`
% echo $?
0
Cela signifie que c++
appelle au moins le même compilateur, mais théoriquement, il peut interpréter certaines options de ligne de commande différemment ou avoir des valeurs par défaut différentes. Quelqu'un avec plus de connaissances est libre d'étendre la réponse à cet égard.
Sur ma machine, c++
est un lien:
$ readlink /usr/bin/c++
/etc/alternatives/c++
$ readlink /etc/alternatives/c++
/usr/bin/g++
Alors c++
n'est qu'un lien vers g++
.
g ++ est le compilateur gnu c ++ où c ++ est le compilateur système c ++, dans le cas d'ubuntu C++ est un lien vers g ++ mais dans un autre système, il pourrait très bien être un lien vers un compilateur non gcc. comme quelqu'un d'autre l'a dit vi vs vim. ce n'est pas parce qu'il existe un lien vers vi sur le système que ce peut être n'importe quel clone vi.