Pregunta: ¿Cómo compilar un programa C ++ con el compilador gcc?
info.c:
#include<iostream>
using std::cout;
using std::endl;
int main()
{
#ifdef __cplusplus
cout << "C++ compiler in use and version is " << __cplusplus << endl;
#endif
cout <<"Version is " << __STDC_VERSION__ << endl;
cout << "Hi" << __FILE__ << __LINE__ << endl;
}
y cuando trato de compilar info.c
$ gcc info.C
Undefined first referenced
symbol in file
cout /var/tmp/ccPxLN2a.o
endl(ostream &) /var/tmp/ccPxLN2a.o
ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccPxLN2a.o
ostream::operator<<(int) /var/tmp/ccPxLN2a.o
ostream::operator<<(long) /var/tmp/ccPxLN2a.o
ostream::operator<<(char const *) /var/tmp/ccPxLN2a.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status
¿No es el compilador gcc capaz de compilar programas C ++? En una nota relacionada, ¿cuál es la diferencia entre gcc y g ++. Gracias,
Respuestas:
gcc realmente puede compilar código c ++ muy bien. Los errores que recibió son errores del vinculador , no errores del compilador.
Lo más probable es que si cambia la línea de compilación para que sea esta:
gcc info.C -lstdc++
lo que hace que se vincule a la biblioteca estándar de C ++, entonces funcionará bien.
Sin embargo, debería hacer su vida más fácil y usar g ++.
EDITAR:
Rup lo dice mejor en su comentario a otra respuesta:
fuente
Si le da al código una extensión .c, el compilador cree que es código C, no C ++. Y el controlador del compilador de C ++ se llama g ++, si usa el controlador gcc tendrá problemas con el vinculador, ya que las bibliotecas estándar de C ++ no estarán vinculadas por defecto. Entonces quieres:
g++ myprog.cpp
Y ni siquiera considere usar una extensión .C en mayúsculas, a menos que nunca quiera portar su código y esté preparado para ser odiado por aquellos con quienes trabaja.
fuente
.C
extensión (mayúscula) como una extensión de c ++. Lo siguiente funciona bien:gcc test.C -lstdc++ -o test
og++ test.C -o test
.utilizar en
g++
lugar degcc
.fuente
De forma predeterminada, gcc selecciona el idioma en función de la extensión del archivo, pero puede obligar a gcc a seleccionar un backend de idioma diferente con la opción -x de esta manera:
gcc -x c++
Más opciones se detallan en la página de manual de gcc en "Opciones que controlan el tipo de salida". Véase, por ejemplo, http://linux.die.net/man/1/gcc (busque el texto en la página
-x language
).Esta función es muy útil en los casos en que gcc no puede adivinar el idioma usando una extensión de archivo, por ejemplo, si está generando código y alimentándolo a gcc a través de stdin.
fuente
La diferencia entre gcc y g ++ son:
gcc | g++ compiles c source | compiles c++ source
use g ++ en lugar de gcc para compilar su fuente de c ++.
fuente
Si mal no recuerdo, gcc determina el tipo de archivo a partir del sufijo. Entonces, hazlo foo.cc y debería funcionar.
Y, para responder a su otra pregunta, esa es la diferencia entre "gcc" y "g ++". gcc es una interfaz que elige el compilador correcto.
fuente
Funciono bien para mi. Solo un código de línea en cmd.
Primero, confirme que ha instalado el compilador gcc (para c) o g ++ (para c ++).
En cmd para el tipo gcc:
gcc --versión
en cmd para el tipo g ++:
g ++ --versión
Si está instalado, continúe.
Ahora, compile su .co .cpp usando cmd
para la sintaxis .c :
gcc -o exe_filename yourfilename.c
Ejemplo:
gcc -o myfile myfile.c
Aquí exe_filename (myfile en el ejemplo) es el nombre de su archivo .exe que desea producir después de la compilación (Nota: no he puesto ninguna extensión aquí). Y yourfilename.c (myfile.c en el ejemplo) es el archivo fuente que tiene la extensión .c.
Ahora vaya a la carpeta que contiene su archivo .c, aquí encontrará un archivo con extensión .exe. Solo ábrelo. Viva..
Para la sintaxis .cpp :
g ++ -o exe_filename yourfilename.cpp
Después, el proceso es el mismo que para .c.
fuente