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

10 minutos de lectura

¿Cual es la diferencia entre g y gcc
Brian R. Bondy

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

gcc y g++ son controladores de compilador del compilador GNU Colección (que alguna vez fue solo el GNU Compilador C).

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

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

Según la documentación en línea de GCC opciones de enlace y cómo se invoca g++, g++ es 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 el -v opción (muestra los comandos de la cadena de herramientas de back-end que se están ejecutando).

  • De esta respuesta, concluyo que efectivamente el comando g ++ es solo gcc con un montón de banderas … ¿Por qué entonces, hay dos binarios diferentes (de aproximadamente el mismo tamaño) para gcc y g ++ en Linux? ¿No deberíamos tener solo un binario y un enlace simbólico (o algo por el estilo)?

    – UchihaItachi-Cuenta-inactiva

    17 de julio de 2019 a las 14:32

  • @Uchihaltachi estos archivos son enlaces duros y cuando se inician comprueban argv[0] para ver qué invocación se debe utilizar. Esto es bastante común entre las principales utilidades de UNIX.

    usuario836218

    12 de noviembre de 2019 a las 18:55

  • Dónde dice eso g++ is equivalent to gcc -xc++ -lstdc++ -shared-libgcc en los documentos? Solo dice que trata .c, .h e .i como C++ y vincula libstdc++ automáticamente. Si el comando publicado fuera el caso, se compilaría un archivo .txt con un código C++ válido, pero en su lugar devolvería un error de formato de archivo no compatible.

    – Dakota del Sur

    14 de septiembre de 2020 a las 3:37

  • @neoedmund aquí. (¡De nada! No hay necesidad de agradecerme)

    – alguien

    21 de noviembre de 2021 a las 4:14

  • aquí si todavía tienes dudas.

    – alguien

    21 de noviembre de 2021 a las 4:15

¿Cual es la diferencia entre g y gcc
martín york

GCC: Colección de compiladores GNU

  • Referentes a todos los diferentes lenguajes que son compatibles con el compilador GNU.

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

Las principales diferencias:

  1. gcc compilará: *.c\*.cpp archivos como C y C++ respectivamente.
  2. g++ compilará: *.c\*.cpp pero todos serán tratados como archivos C++.
  3. También si usas g++ para vincular los archivos de objetos, se vincula automáticamente en las bibliotecas estándar de C++ (gcc no hace esto).
  4. gcc compilar archivos C tiene menos macros predefinidas.
  5. gcc compilando *.cpp y g++ compilando *.c\*.cpp archivos tiene algunas macros adicionales.

Macros adicionales al compilar *.cpp archivos:

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern

  • Puede vincular la biblioteca estándar de C++ en gcc al pasar -lstdc++ parámetro.

    – Denilson Sá Maia

    23 de agosto de 2010 a las 0:13

  • Hay más diferencias entre ‘gcc’ y ‘g++’ que solo las bibliotecas estándar, por lo que gcc -lstdc++ todavía no obtendrá el mismo comportamiento que g++. Ponemos todo ese comportamiento específico del idioma en su propio controlador por una razón, para eso está ahí. 🙂

    – Ti Strga

    28 de enero de 2013 a las 21:03

  • Mi comentario no se refiere solo a vincular… ese es el punto. Incluso restringiendo la discusión a la vinculación (que su respuesta no fue), un usuario todavía no podrá usar toda la biblioteca estándar de C++ especificando solo -lstdc++, ya que faltarán dependencias en matemáticas, RTTI e información de excepciones. El hecho de que un caso de prueba determinado se vincule o falle dependerá del sistema operativo y de las funciones de C++ utilizadas por el caso de prueba, razón por la cual todo ese conocimiento está integrado en el controlador g++ en lugar de dejar que el usuario lo descubra. .

    – Ti Strga

    29 de enero de 2013 a las 15:38

  • Confía en mí, tenemos esta discusión mucho, generalmente cuando un usuario de Linux intenta mover su Makefile incompleto a otra plataforma. 🙂 La etapa de enlace de g++ hace mucho más que gcc -lstdc++ en otros sistemas operativos, especialmente cuando el objetivo es una plataforma integrada. Afortunadamente, es por eso que enviamos un g ++ en primer lugar.

    – Ti Strga

    29 de enero de 2013 a las 15:40

  • Las cadenas de especificaciones se construyen para ser específicas del compilador, que a su vez son específicas del sistema operativo y el destino. Así que si corres -dumpspec en (por ejemplo) un compilador cruzado dirigido a un sistema integrado, verá las diferencias. Hay más que solo diferencias de vinculador … que, de nuevo, es de lo que se trataba su respuesta (macros de preprocesador, rutas de inclusión, bibliotecas de tiempo de ejecución múltiples). Parece que estamos hablando entre nosotros, pero como antiguo mantenedor de GCC, les aseguro que estoy familiarizado con lo que son y no son las interfaces.

    – Ti Strga

    29 de enero de 2013 a las 17:02


Para c ++ debe usar g ++.

Es el mismo compilador (por ejemplo, la colección de compiladores GNU). GCC o G ++ simplemente elija un front-end diferente con diferentes opciones predeterminadas.

En pocas palabras: si usa g ++, la interfaz le dirá al enlazador que es posible que desee vincular 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).

  • +1 También mi página man de GNU/Linux gcc dice: “Cuando compilas programas C++, debes invocar GCC como g++ en su lugar”.

    – Vista elíptica

    23 de octubre de 2018 a las 0:54

1647559450 475 ¿Cual es la diferencia entre g y gcc
l –marc l

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

gcc ha evolucionado de un “compilador GNU C” de un solo idioma a una “colección de compiladores GNU” en varios idiomas. El termino gcc todavía puede referirse a veces al “Compilador GNU C” en el contexto de la programación C.

man gcc

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

Sin embargo, g++ es el compilador de C++ para la colección de compiladores GNU. Me gusta gnat es el compilador de Ada para gcc. consulte Uso de la colección de compiladores GNU (GCC)

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

Ubuntu 16.04 y 18.04 man gcc Establece que …

g++ acepta en su mayoría las mismas opciones que gcc

y que por defecto…

… uso de gcc no agrega la biblioteca C++. g++ es un programa que llama a GCC y especifica automáticamente la vinculación con la biblioteca de C++. Trata los archivos .c, .h e .i como archivos fuente C++ en lugar de archivos fuente C a menos que se use -x. Este programa también es útil cuando se precompila un archivo de encabezado C con una extensión .h para usar en compilaciones C++.

Buscar el gcc páginas del manual para obtener más detalles sobre las variaciones de opciones entre gcc y g++.

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

Técnicamente, tampoco gcc o g++ se puede utilizar para el desarrollo general de C++ con la configuración de opciones aplicable. sin embargo, el g++ el comportamiento predeterminado se alinea naturalmente con un desarrollo de C++.

los Página man de Ubuntu 18.04 ‘gcc’ añadido, y Ubuntu 20.04 sigue teniendo, el siguiente párrafo:

La forma habitual de ejecutar GCC es ejecutar el ejecutable llamado gcco machine-gcc al realizar una compilación cruzada, o machine-gcc-version para ejecutar una versión específica de GCC. Cuando compila programas C++, debe invocar GCC como g++ en lugar de.


Nota al margen: en el caso de la cadena de herramientas integrada de Xcode.app, g++ simplemente enlaces 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++

1647559450 209 ¿Cual es la diferencia entre g y gcc
njsf

Una diferencia notable es que si pasas un .c archivo a gcc se compilará como C.

El comportamiento predeterminado de g++ es tratar .c archivos como C++ (a menos que -x c está especificado).

  • (Tarde, pero para la posteridad) Como han señalado otras respuestas, esta no es de ninguna manera “la única diferencia notable”, a menos que el lector tenga una definición sesgada de notoriedad.

    – subrayado_d

    13/09/2015 a las 21:54

¿Cual es la diferencia entre g y gcc
zafod

Aunque los comandos gcc y g++ hacen cosas muy similares, g++ está diseñado para ser el comando que invocaría para compilar un programa C++; está destinado a hacer automáticamente lo correcto.

Detrás de escena, son realmente el mismo programa. Según tengo entendido, ambos deciden si compilar un programa como C o como C++ según la extensión del nombre de archivo. Ambos son capaces de vincularse con la biblioteca estándar de C++, pero solo g++ hace esto de forma predeterminada. Entonces, si tiene un programa escrito en C ++ que no necesita vincularse con la biblioteca estándar, gcc hará lo correcto; pero entonces, también lo haría g++. Entonces, realmente no hay razón para no usar g ++ para el desarrollo general de C ++.

  • (Tarde, pero para la posteridad) Como han señalado otras respuestas, esta no es de ninguna manera “la única diferencia notable”, a menos que el lector tenga una definición sesgada de notoriedad.

    – subrayado_d

    13/09/2015 a las 21:54

1647559451 381 ¿Cual es la diferencia entre g y gcc
oHo

Me interesé por el tema y realicé algunos experimentos.

  1. encontre esa descripcion aquípero es muy corto.

  2. Luego traté de experimentar con gcc.exe y g++.exe en mi máquina con Windows:

    $ g++ --version | head -n1 
    g++.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
    
    $ gcc --version | head -n1
    gcc.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
    
  3. Traté de compilar archivos de prueba simples c89, c99 y c++1998 y funciona bien para mí con las extensiones correctas que coinciden con el idioma

    gcc -std=c99 test_c99.c
    gcc -std=c89 test_c89.c 
    g++ -std=c++98 test_cpp.cpp
    gcc -std=c++98 test_cpp.cpp
    
  4. Pero cuando trato de ejecutar la herramienta “colección de compiladores gnu” de esa manera:

    $ gcc -std=c++98 test_cpp.c
    cc1.exe: warning: command line option '-std=c++98' is valid for C++/ObjC++ but not for C [enabled by default]
    
  5. Pero este todavía funciona sin errores.

    $ gcc -x c++ -std=c++98 test_cpp.c
    
  6. y esto tambien

    $ g++ -std=c++0x test_cpp_11.cpp 
    

ps Archivos de prueba

$ cat test_c89.c test_c99.c test_cpp.cpp

// C89 compatible file
int main()
{
    int x[] = {0, 2};
    return sizeof(x);
}

// C99 compatible file
int main()
{
    int x[] = {[1]=2};
    return sizeof(x);
}

// C++1998,2003 compatible file
class X{};
int main()
{
    X x;
    return sizeof(x);
}

// C++11
#include <vector>
enum class Color : int{red,green,blue}; // scoped enum
int main()
{
    std::vector<int> a {1,2,3}; // bracket initialization
    return 0;
}

Recomendaciones:

  1. Si observa el árbol de procesos, parece que gcc y g ++ son backend para otras herramientas, que en mi entorno son: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe

  2. gcc funciona bien como metaherramienta si tiene la extensión correcta o establece las banderas -std -x correctas. Ver esta

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad