gcc - compiler - mingw
¿Cuál es la diferencia entre gcc y g++/gcc-c++? (2)
Me parece que gcc puede ocuparse de proyectos c y c ++, entonces, ¿por qué se necesita g ++ / gcc-c ++?
¿Cuál es la diferencia entre g ++ y gcc-c ++?
Por lo que yo sé, g ++ usa las opciones correctas del enlazador C ++ mientras que gcc usa las opciones del enlazador C (para que pueda obtener referencias indefinidas, etc.).
gcc
compilará los archivos fuente C como archivos fuente C y C ++ como C ++ si el archivo tiene una extensión apropiada; sin embargo, no se vinculará automáticamente en la biblioteca de C ++.
g++
incluirá automáticamente la biblioteca C ++; de forma predeterminada, también compilará archivos con extensiones que indican que son fuente C como C ++, en lugar de como C.
Desde http://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html#Invoking-G_002b_002b :
Los archivos fuente de C ++ usan convencionalmente uno de los sufijos
.C
,.cc
,.cpp
,.CPP
,.c++
,.cp
o.cxx
; Los archivos de cabecera C ++ a menudo usan.hh
,.hpp
,.H
o (para código de plantilla compartida).tcc
; y los archivos C ++ preprocesados usan el sufijo.ii
. GCC reconoce archivos con estos nombres y los compila como programas C ++, incluso si llama al compilador de la misma manera que para compilar programas C (generalmente con el nombre gcc).Sin embargo, el uso de gcc no agrega la biblioteca de C ++. g ++ es un programa que llama a GCC y trata los
.c
,.h
y.i
como archivos fuente C ++ en lugar de archivos fuente C a menos que se use -x, y especifica automáticamente el enlace contra la biblioteca C ++. Este programa también es útil al precompilar un archivo de encabezado C con una extensión.h
para su uso en compilaciones de C ++.
Por ejemplo, para compilar un programa sencillo de C ++ que escribe en la secuencia std::cout
, puedo usar cualquiera (MinGW en Windows):
- g ++ -o test.exe test.cpp
- gcc -o test.exe test.cpp -lstdc ++
Pero si intento:
- gcc -o test.exe test.cpp
Obtengo referencias indefinidas en el momento del enlace.
Y para la otra diferencia, el siguiente programa C:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int* new;
int* p = malloc(sizeof(int));
*p = 42;
new = p;
printf("The answer: %d/n", *new);
return 0;
}
compila y funciona bien usando:
- gcc -o test.exe test.c
Pero da varios errores cuando se compila con:
- g ++ -o test.exe test.c
Errores:
test.c: In function ''int main()'':
test.c:6:10: error: expected unqualified-id before ''new''
test.c:6:10: error: expected initializer before ''new''
test.c:7:32: error: invalid conversion from ''void*'' to ''int*''
test.c:10:9: error: expected type-specifier before ''='' token
test.c:10:11: error: lvalue required as left operand of assignment
test.c:12:36: error: expected type-specifier before '')'' token