¿Cuál es la diferencia entre g++ y gcc?

Resuelto Brian R. Bondy asked hace 16 años • 11 respuestas

¿Cuál es la diferencia entre g++ y gcc? ¿Cuál de ellos debería usarse para el desarrollo general de C++?

Brian R. Bondy avatar Oct 06 '08 03:10 Brian R. Bondy
Aceptado

gccy g++son controladores de compilador de la Colección de Compiladores GNU (que alguna vez fue solo el Compilador GNU C ).

Aunque determinan automáticamente a qué backends ( cc1 cc1plus...) llamar según el tipo de archivo, a menos que se anulen con -x language, tienen algunas diferencias.

La diferencia probablemente más importante en sus valores predeterminados es con qué bibliotecas se vinculan automáticamente.

De acuerdo con las opciones de enlace de la documentación en línea de GCC y cómo se invoca g++ , g++es aproximadamente equivalente a gcc -xc++ -lstdc++ -shared-libgcc(la primera es una opción del compilador, las dos segundas son opciones del enlazador). Esto se puede verificar ejecutando ambos con la -vopción (muestra los comandos de la cadena de herramientas del backend que se están ejecutando).

De forma predeterminada (y a diferencia de gcc), g++ también agrega la opción de vinculación-lm , para vincular libmla que contiene implementaciones para math.h.

 avatar Oct 05 '2008 20:10

GCC: Colección de compiladores GNU

  • Referencias a todos los diferentes lenguajes soportados por el compilador GNU.

gcc: Compilador GNU C
g++: Compilador GNU C++

Las principales diferencias:

  1. gcccompilará: *.c\*.cpparchivos como C y C++ respectivamente.
  2. g++compilará: *.c\*.cpparchivos pero todos serán tratados como archivos C++.
  3. Además, si utiliza g++para vincular los archivos objeto, se vincula automáticamente en las bibliotecas estándar de C++ ( gccno hace esto).
  4. gccLa compilación de archivos C tiene menos macros predefinidas.
  5. gcccompilar *.cppy g++compilar *.c\*.cpparchivos tiene algunas macros adicionales.

Macros adicionales al compilar *.cpparchivos:

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern
Martin York avatar Oct 06 '2008 01:10 Martin York

Para c++ deberías usar g++.

Es el mismo compilador (por ejemplo, la colección de compiladores GNU). GCC o G++ simplemente eligen una interfaz diferente con diferentes opciones predeterminadas.

En pocas palabras: si usa g++, la interfaz le indicará al vinculador que es posible que desee vincularse con las bibliotecas estándar de C++. La interfaz de gcc no hará eso (también podría vincularse con ellos si pasa las opciones de línea de comando correctas).

Nils Pipenbrinck avatar Oct 05 '2008 20:10 Nils Pipenbrinck

¿ Cuál es la diferencia entre g++y gcc?

gccha evolucionado de un "compilador GNU C" de un solo lenguaje a una "colección de compiladores GNU" multilingüe. En ocasiones, el término gcctodavía puede referirse al "compilador GNU C" en el contexto de la programación en C.

man gcc

# GCC(1)                     GNU
# 
# NAME
#        gcc - GNU project C and C++ compiler

Sin embargo, g++ es la interfaz del compilador C++ para la colección de compiladores GNU. Al igual gnatque la interfaz del compilador Ada para gcc. consulte Uso de la colección de compiladores GNU (GCC)

Por ejemplo, el comando Ubuntu 16.04 y 18.04 man g++devuelve la GCC(1)página del manual.

Ubuntu 16.04 y 18.04 man gccestablece que...

g++acepta principalmente las mismas opciones quegcc

y que por defecto...

... el uso de gccno agrega la biblioteca C++. g++es un programa que llama a GCC y especifica automáticamente el enlace con la biblioteca de C++. Trata los archivos .c, .h y .i como archivos fuente C++ en lugar de archivos fuente C, a menos que se utilice -x. Este programa también es útil al precompilar un archivo de encabezado C con una extensión .h para usar en compilaciones de C++.

Busque en las gccpáginas de manual para obtener más detalles sobre las variaciones de opciones entre gccy g++.

¿Cuál debería usarse para el desarrollo general de C++?

Técnicamente, gcco g++puede usarse para el desarrollo general de C++ con la configuración de opciones aplicable. Sin embargo, el g++comportamiento predeterminado está naturalmente alineado con un desarrollo en C++.

Se agregó la página de manual 'gcc' de Ubuntu 18.04 , y Ubuntu 20.04 continúa teniendo el siguiente párrafo:

La forma habitual de ejecutar GCC es ejecutar el ejecutable llamado gcc, o machine-gccal realizar una compilación cruzada, o machine-gcc-versionejecutar una versión específica de GCC. Cuando compilas programas C++, deberías invocar GCC como g++.


Nota al margen: en el caso de la cadena de herramientas integrada Xcode.app, g++simplemente se vincula a gcc. Por lo tanto, g++las invocaciones pueden variar según la cadena de herramientas.

ls -l /Applications/Xcode.app/Contents/Developer/usr/bin
# …
# lrwxr-xr-x  1 root  wheel         3 Apr 27  2021 g++ -> gcc
# -rwxr-xr-x  1 root  wheel    167120 Nov 23 20:51 gcc

### -- versus --
which -a g++
# /usr/bin/g++
ls -l /usr/bin/g++
# -rwxr-xr-x  1 root  wheel  137616 Jan  1  2020 /usr/bin/g++
marc-medley avatar Jan 05 '2016 10:01 marc-medley

Una diferencia notable es que si pasa un .carchivo a gcc, se compilará como C.

El comportamiento predeterminado de g++ es tratar .clos archivos como C++ (a menos que -x cse especifique).

njsf avatar Oct 05 '2008 20:10 njsf