2008-10-05 18 views

Respuesta

530

gcc y g++ son compilador de los conductores de la 'GNU Compiler Collection ' (que fue en otro tiempo sólo el 'Gnu compilador de C').

A pesar de que ellos determinan automáticamente qué backends (cc1cc1plus ...) para llamar dependiendo del tipo de archivo, a menos que se modifique con -x language, tienen algunas diferencias.

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

Según [1] y [2], g++ es equivalente a gcc -xc++ -lstdc++ -shared-libgcc (la primera es una opción del compilador, el segundo dos son las opciones del vinculador). Esto se puede comprobar ejecutando ambos con la opción -v (muestra los comandos back-end toolchain que se están ejecutando).

+131

El compilador real es "cc1" para C y "cc1plus" para C++; tanto gcc como g ++ son controladores (que llaman al preprocesador/compilador/ensamblador/vinculador según sea necesario). – CesarB

+26

Esta respuesta es bastante inútil, se reduce a "hay diferencias, por ejemplo, algunas bibliotecas". ¿Qué bibliotecas? ¿Qué otras diferencias además de las bibliotecas? No tengo idea de por qué obtuvo tantos votos ascendentes. – Malcolm

58

Para C++ debe usar g ++.

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

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

8

La única diferencia notable es que se pasa un .c GCC se compilará como C, mientras que g ++ siempre habrá tratarlo como C++

+4

(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 notación. –

13

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

Detrás de escena, en realidad son el mismo programa. Según tengo entendido, ambos deciden si compilan un programa como C o como C++ en función de la extensión del nombre del archivo. Ambos son capaces de vincularse con la biblioteca estándar de C++, pero solo g ++ lo hace 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++.

334

GCC: GNU Compiler Collection

  • Referido a todos los diferentes idiomas soportados por el compilador de GNU.

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

Las principales diferencias:

  1. gcc de compilación:. * .c/* cpp como C y C++ respectivamente.
  2. g ++ compilará: *.c/*. cpp pero todos serán tratados como archivos C++.
  3. Además, si usas g ++ para vincular los archivos objeto, automáticamente se enlaza en las librerías std C++ (gcc no hace esto).
  4. gcc compilación de archivos C tiene menos macros predefinidas.
  5. gcc compilación * .cpp yg ++ compilación * .c/*. Cpp tiene algunas macros adicionales.

macros adicionales al compilar archivos * .cpp:

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

Puede vincular la biblioteca std C++ en 'gcc' pasando el parámetro' -lstdC++ '. –

+13

Hay más diferencias entre 'gcc' y 'g ++' que solo las bibliotecas estándar, por lo que 'gcc -lstdC++' aún no obtendrá el mismo comportamiento que 'g ++'. Ponemos todo ese comportamiento específico del lenguaje en su propio controlador por una razón, eso es lo que está ahí. :-) –

+8

Mi comentario no es solo vincular ... ese es el punto. Incluso si solo restringe 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 '-lstdC++', ya que faltarán dependencias en matemática, RTTI e información de excepción. Si un caso de prueba determinado se vincula o falla dependerá del sistema operativo y qué características de C++ utiliza el caso de prueba, que es por qué todo ese conocimiento está integrado en el controlador g ++ en lugar de dejarse en manos del usuario para descubrirlo . –

9

“CCG” es una abreviatura común para la colección de compiladores de GNU. Este es el nombre más general para el compilador, y el nombre utilizado cuando se hace hincapié en la compilación de programas C (como la abreviatura anteriormente significaba "Compilador GNU C").

Cuando se hace referencia a la compilación de C++, es habitual llamar al compilador "G ++". Como solo hay un compilador, también es correcto llamarlo "GCC" sin importar el contexto del idioma; sin embargo, el término "G ++" es más útil cuando se hace hincapié en la compilación de programas C++.

Puede leer más here.

0

gcc y g ++ son ambos compiladores de GNU. Ambos compilan c y C++. La diferencia es para los archivos * .c gcc lo trata como un programa c, y g ++ lo ve como un programa C++. * Los archivos .cpp se consideran programas en C++. C++ es un super conjunto de c y la sintaxis es más estricta, así que ten cuidado con el sufijo.

+0

C++ es un lenguaje diferente, no un superconjunto estricto de C, por lo que compilar con el idioma de destino incorrecto podría producir resultados inesperados. También tenga en cuenta que 'g ++' también interpretará '.cc' como una extensión de nombre de archivo C++. –

10

que se interesó en el tema y llevar a cabo algunos experimentos

  1. me encontré con esa descripción here, pero es muy corto.

  2. Luego trató de experimentar con gcc.exe y g ++ exe en mi máquina 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 C89, C99, y C++ 1998 archivos de prueba simple y es el trabajo bien para mí con extensiones correctas a juego para el lenguaje

    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 de "colección de compiladores de 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 éste aún funciona sin errores

    $ gcc -x c++ -std=c++98 test_cpp.c 
    
  6. Y esto también

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

P. S.Los 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; 
} 

Hallazgos:

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

  2. gcc funciona bien como para metatool si tiene la extensión correcta o conjunto correcto banderas -x -std. Ver this

9

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

gcc ha evolucionado a partir de un solo idioma "Compilador GNU C" para ser una "Colección de Compilador GNU en varios idiomas". El término "compilador GNU C" todavía se usa a veces en el contexto de la programación C.

El g++es el compilador de C++ para la compilación del compilador de GNU. Como gnat es el compilador de Ada para gcc. see Using the GNU Compiler Collection (GCC)

Por ejemplo en Ubuntu 16.04, man g++ devuelve la página de manual GCC(1).

Los estados que man gcc ...

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

y que el defecto ...

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

buscar en las páginas man para gcc mores datos sobre las variaciones de opciones de gcc y g++.

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

O gcc o g++ se pueden utilizar para el desarrollo general de C++ con la configuración de opción aplicable. Sin embargo, el comportamiento predeterminado de g++ está más naturalmente alineado con un desarrollo centrado en C++.

0

Estaba probando gcc y g ++ en un sistema Linux. Al usar MAKEFILE, puedo definir el compliler utilizado por "GNU make".Probé con la llamada "memoria dinámica" función de la localización "C plus plus" por:

int main(){ 

int * myptr = new int; 
* myptr = 1; 
printf("myptr[0] is %i\n",*myptr); 
return 0; 
} 

Sólo g ++ puede compilar correctamente en mi equipo, mientras que gcc informará de error

undefined reference to `operator new(unsigned long)' 

Así que mi propia conclusión es que gcc no es totalmente compatible con "C plus plus". Parece que elegir g ++ para archivos fuente en C++ es una mejor opción.

+0

Tienes que hacer dos trabajos: 1. seleccionar el idioma 2. elegir alguna biblioteca suhch como libstdC++ – PersianGulf

Cuestiones relacionadas