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

  1. ¿Qué es GCC? GCC es la colección de compiladores GNU, que proporciona controladores para C++, C y otros lenguajes.
  2. ¿Cómo puedo comprobar si GCC está instalado? Ejecuta g++ --version para comprobar si está disponible el controlador de C++, o gcc --version para comprobar el de C.
  3. ¿Por qué usar g++ en lugar de gcc para 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 con gcc quizá requiera especificar -lstdc++.
  4. ¿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.
  5. ¿Qué hace -o? Indica el nombre del archivo de salida, que será un ejecutable si se trata de un comando de compilación completo, como g++ -o hello hello.cpp.