HOWTO · C++
Compilar un programa C++ usando GCC
Este artículo analiza un método para compilar un programa C++ usando el compilador gcc.
En esta página
Para compilar y ejecutar un archivo fuente de C++, usa el controlador del compilador g++: ejecuta g++ -o hello hello.cpp y, después, ./hello en Linux o macOS. GCC es la colección de compiladores GNU; g++ selecciona el comportamiento de compilación de C++, incluido el enlace con la biblioteca estándar de C++ en un programa habitual. Los pasos siguientes explican cómo comprobar si hay un compilador disponible, crear un primer programa, interpretar diagnósticos comunes y compilar un proyecto pequeño con varios archivos.
Qué es GCC y por qué es importante
GCC es una colección de compiladores que incluye controladores para varios lenguajes. Para trabajar con C++, g++ suele ser el controlador más sencillo. Una compilación traduce el código fuente y enlaza el código objeto resultante con las bibliotecas necesarias para crear un ejecutable. Un solo comando puede realizar ambas etapas; en un proyecto más grande, los archivos pueden compilarse por separado antes de enlazarlos.
El controlador gcc puede compilar código fuente de C++, pero no enlaza automáticamente la biblioteca estándar de C++ del mismo modo que g++. En las cadenas de herramientas de GNU/Linux, se puede usar gcc con -lstdc++ para solicitar esa biblioteca explícitamente. El orden de las bibliotecas y los detalles de la plataforma pueden influir, así que para las compilaciones habituales de C++ conviene usar g++. Los archivos fuente suelen tener la extensión .cpp o .cc; GCC también trata la extensión .C en mayúscula como C++ en sistemas que distinguen entre mayúsculas y minúsculas.
Instalar GCC
Primero, comprueba si ya tienes un compilador de C++ ejecutando g++ --version en una terminal. Si encuentra el compilador, el comando muestra su versión instalada. Si el comando no está disponible, instala una cadena de herramientas de C++ mediante el gestor de paquetes de tu sistema operativo o el proveedor recomendado para ese sistema. Los nombres de los paquetes y los pasos de instalación varían; en Ubuntu y algunas distribuciones relacionadas, build-essential incluye GCC y otras herramientas de compilación. En Windows, instala una cadena de herramientas de GCC, como MinGW-w64, y añade su directorio bin a PATH, o utiliza otra cadena de herramientas de C++ compatible. Sigue las instrucciones actuales de tu distribución o cadena de herramientas en vez de basarte en el número de versión de un ejemplo antiguo.
Escribir tu primer programa en C++
Crea un archivo llamado hello.cpp en un directorio de trabajo. Este programa escribe una línea en la salida estándar:
Ejecuta este ejemplo:
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}
Hello, World!
#include <iostream> proporciona las declaraciones de flujo que utiliza std::cout. La función main es el punto de entrada del programa, y \n termina la línea impresa.
Compilar el programa en C++
Desde el directorio que contiene hello.cpp, compílalo y asigna un nombre al ejecutable con g++ -o hello hello.cpp. La opción -o indica el nombre de salida; si no la usas, GCC emplea un nombre predeterminado, como a.out, en muchos sistemas similares a Unix. El resultado es un ejecutable, no un archivo objeto. En Linux o macOS, ejecútalo con ./hello. En el Símbolo del sistema de Windows, lo habitual es invocarlo como hello.exe desde el directorio actual; la forma exacta depende del intérprete de comandos y de la cadena de herramientas.
Como alternativa orientada a GNU/Linux, gcc -o hello hello.cpp -lstdc++ solicita explícitamente la biblioteca estándar de C++. Puede ser útil cuando un sistema de compilación exige el controlador gcc, pero para un programa normal de C++ es preferible g++, porque selecciona automáticamente el comportamiento de enlace adecuado para C++.
Depurar errores de compilación
Lee los diagnósticos de izquierda a derecha: indican un archivo fuente y una línea, y después describen el problema. Por ejemplo, si un programa usa cout sin incluir <iostream> ni especificar std::cout, un diagnóstico puede indicar que cout no está declarado. Añade la inclusión que falta y usa std::cout; luego, vuelve a compilar. La redacción exacta y los números de línea varían según la versión del compilador y la disposición del código fuente.
Puedes pedir a GCC que active advertencias comunes con g++ -Wall -o hello hello.cpp. -Wall es un buen punto de partida, pero no activa todas las advertencias que ofrece GCC. Las advertencias son mensajes de diagnóstico que pueden señalar código sospechoso; revísalas y decide si debes cambiar el código o las opciones de compilación.
Enlazar varios archivos
Un programa puede definir una función en un archivo fuente y llamarla desde otro. Por ejemplo, main.cpp puede incluir <iostream>, declarar int add(int, int); y definir int main() { std::cout << add(2, 3) << '\n'; }. En functions.cpp, define int add(int a, int b) { return a + b; }. Esta declaración y definición coincidentes permiten que el compilador compruebe la llamada y que el enlazador la conecte con la implementación.
Compila ambos archivos fuente con un solo comando: g++ -o my_program main.cpp functions.cpp. Este comando compila cada archivo fuente y los enlaza para crear el ejecutable my_program. En Linux o macOS, ejecútalo con ./my_program; el ejemplo imprime 5. En Windows, ejecuta el archivo resultante my_program.exe con la invocación compatible con tu intérprete de comandos.
Conclusión
Para una compilación habitual de C++ con GCC, usa g++ -o program source.cpp y, después, ejecuta el archivo que produce el comando. El controlador gcc también puede compilar C++, pero en GNU/Linux quizá haya que añadir -lstdc++ explícitamente. En general, elegir g++ evita tener que especificar esa biblioteca adicional.
Preguntas frecuentes
- ¿Qué es GCC? GCC es la colección de compiladores GNU, que proporciona controladores para C++, C y otros lenguajes.
- ¿Cómo puedo comprobar si GCC está instalado? Ejecuta
g++ --versionpara comprobar si está disponible el controlador de C++, ogcc --versionpara comprobar el de C. - ¿Por qué usar
g++en lugar degccpara C++?g++selecciona automáticamente el comportamiento de enlace de C++, incluida la biblioteca estándar que necesitan los programas habituales. En GNU/Linux, una compilación congccquizá requiera especificar-lstdc++. - ¿Se pueden compilar varios archivos C++ con un solo comando? Sí. Incluye cada archivo fuente en el comando
g++, por ejemplo:g++ -o my_program main.cpp functions.cpp. - ¿Qué hace
-o? Indica el nombre del archivo de salida, que será un ejecutable si se trata de un comando de compilación completo, comog++ -o hello hello.cpp.