2009-11-11 21 views
35

Acabo de encontrar en mi Ubuntu, hay dos compiladores de C++ diferentes:/usr/bin/g ++ y/usr/bin/C++. No estoy familiarizado con esto último, pero man C++ simplemente salta a la página de manual de gcc. Me pregunto ¿cuál es su diferencia como compiladores de C++?compilador "g ++" y "C++"

¡Gracias y saludos!

+4

'cc' y' C++ 'son nombres de compiladores POSIX. Lo más probable es que 'C++' sea un enlace simbólico a 'g ++', y 'cc' a' gcc'. –

+0

Posible duplicado de [¿Cuál es la diferencia entre g ++ y gcc?] (Https://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc) –

Respuesta

42

Este es el típico caos de symlink de Ubuntu.

Si ls -l /usr/bin/c++, verá que en realidad es un enlace simbólico. a:

/etc/alternatives/c++ 

Que a su vez, es también un enlace simbólico a:

/usr/bin/g++ 

Por lo tanto, en los sistemas de Ubuntu, C++ es g ++. El razonamiento detrás del enlace indirecto es que hay varios paquetes que podrían proporcionar un compilador de C++ (como diferentes versiones de g ++). Verás esto mucho en Ubuntu. Por ejemplo, qmake es un enlace a un archivo en/etc/alternatives, que es (en mi sistema) un enlace a/usr/bin/qmake-qt3.

+1

en Fedora 21,/usr/bin/C++ y/usr/bin/g ++ son ambos archivos binarios (es decir, no enlaces simbólicos) ... pero los dos archivos son idénticos (el mismo número de bytes y el mismo md5sum). (Un enlace simbólico parece más apropiado ...No estoy seguro de por qué hicieron una copia del mismo archivo. Tanto g ++ como C++ son proporcionados por las mismas rpm 'gcc-C++'.) –

11

En mi máquina, c++ es un enlace:

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

Así c++ es sólo un enlace a g++.

3

g ++ es el compilador gnu C++ donde C++ es el compilador C++ del sistema, en el caso de ubuntu C++ es un enlace a g ++ pero en otro sistema podría ser un enlace a un compilador no gcc. como alguien más dijo vi vs vim. El hecho de que exista un enlace a vi en el sistema no significa que sea vim podría ser cualquier vi clon.

23

c++ es un nombre estándar de un compilador C++ en un sistema.

En un sistema GNU que es casi seguro que tiene GCC (colección de compiladores GNU) instalado, que incluye un compilador llamado C++g++ ('g' para GNU). Pero para ser POSIX-compatible, instalan este compilador como c++ también, a veces c++ es un enlace simbólico a g++ a veces es un enlace difícil, a veces es el mismo archivo instalado dos veces.

Esto puede no ser el caso para otros sistemas como FreeBSD o NetBSD. Es posible que esos sistemas no tengan instalado GCC (y otras cosas de GNU).

En mi sistema estos dos archivos son idénticos:

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

Esto significa que al menos c++ invoca el mismo compilador, pero teóricamente se pueden interpretar algunas de las opciones de línea de comandos de manera diferente o tener algunos valores predeterminados diferentes. Alguien con más conocimiento es libre de extender la respuesta al respecto.

+1

gracias reviso md5sum de C++ y g ++ y son iguales! ¿Pero para qué hay 2 archivos que hacen el mismo trabajo? – Arseniy

+0

Sí, no hay diferencia, y puede usar lo que quiera. Si usa las opciones específicas de GCC en su compilación, le recomendaría 'g ++', para que quede claro, pero siempre debe dejar que el usuario anule el compilador con la variable 'CXX'. – ams

+2

Incluso si los archivos son idénticos, no significa que sean equivalentes. Un programa puede comportarse de manera diferente según el nombre que se usó para llamarlo (por ejemplo, 'gunzip' y' zcat' son enlaces a 'gzip', y se usan diferentes argumentos predeterminados cuando se llama' gzip' con los otros dos nombres). – Claudio

Cuestiones relacionadas