c++ - con - gcc linux
Compilando un programa en C++ con gcc (7)
De forma predeterminada, gcc selecciona el idioma según la extensión del archivo, pero puede forzar a gcc para seleccionar un backend de idioma diferente con la opción -x así:
gcc -x c++
Se detallan más opciones en la página del manual de gcc en "Opciones que controlan el tipo de salida". Ver, por ejemplo, http://linux.die.net/man/1/gcc (buscar en la página el texto -x language
).
Esta función es muy útil en casos donde gcc no puede adivinar el idioma usando una extensión de archivo, por ejemplo, si está generando código y alimentándolo a gcc vía stdin.
Pregunta: ¿Cómo compilar un programa en 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 intento 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 capaz el compilador gcc de compilar programas C ++? En una nota relacionada, ¿cuál es la diferencia entre gcc y g ++. Gracias,
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 de gcc:
gcc --version
en cmd para el tipo de g ++:
g ++ --versión
Si está instalado, entonces proceda.
Ahora, compila tu .c o .cpp usando cmd
para la sintaxis .c :
gcc -o exe_filename yourfilename.c
Ejemplo:
gcc -o myfile myfile.c
Aquí exe_filename (miarchivo en el ejemplo) es el nombre de tu archivo .exe que deseas producir después de la compilación (Nota: no he puesto ninguna extensión aquí). Y yourfilename.c (myfile.c en el ejemplo) es su archivo fuente que tiene la extensión .c.
Ahora vaya a la carpeta que contiene su archivo .c, aquí encontrará un archivo con la extensión .exe. Solo ábrelo. Viva..
Para la sintaxis .cpp :
g ++ -o exe_filename yourfilename.cpp
Después de esto, el proceso es el mismo que para .c.
La diferencia entre gcc y g ++ son:
gcc | g++
compiles c source | compiles c++ source
Usa g ++ en lugar de gcc para compilar tu fuente de c ++.
Si le da al código una extensión .c el compilador piensa que es código C, no C ++. Y el controlador del compilador C ++ se llama g ++; si usa el controlador gcc, tendrá problemas con los enlazadores, ya que las bibliotecas estándar de C ++ no se vincularán de forma predeterminada. Entonces quieres:
g++ myprog.cpp
Y ni siquiera considere usar una extensión .C en mayúscula, a menos que nunca quiera portar su código, y está preparado para ser odiado por aquellos con quienes trabaja.
Si recuerdo correctamente, gcc determina el tipo de archivo 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.
gcc realmente puede compilar el código de C ++ bien. Los errores que recibió son errores del enlazador , no errores del compilador.
Las probabilidades son que si cambia la línea de compilación es la siguiente:
gcc info.C -lstdc++
lo que hace que se vincule a la biblioteca estándar de C ++, entonces funcionará perfectamente.
Sin embargo, deberías hacerte la vida más fácil y usar g ++.
EDITAR:
Rup dice mejor en su comentario a otra respuesta:
[...] gcc seleccionará el compilador de fondo correcto basado en la extensión de archivo (es decir, compilará un .c como C y un .cc como C ++) y vinculará los binarios solo con las bibliotecas de ayuda estándar C y GCC de forma predeterminada independientemente de idiomas de entrada; g ++ también seleccionará el back-end correcto basado en la extensión excepto que creo que compila todas las fuentes C como C ++ (es decir, compila tanto .c como .cc como C ++) e incluye libstdc ++ en su paso de enlace independientemente de los idiomas de entrada.
usa g++
lugar de gcc
.