Si tenemos un archivo terminado en .c o .cpp, el código todavía no es un programa que podamos ejecutar. Primero hay que compilarlo y después enlazar las piezas necesarias para producir el ejecutable. GCC puede hacer todo en un solo comando para un ejemplo pequeño, pero separar ambos pasos ayuda mucho cuando aparece un error.
En C utilizaremos gcc; en C++, g++. El segundo selecciona el lenguaje C++ y enlaza automáticamente su biblioteca estándar. Usar gcc para un programa C++ puede compilar el archivo y fallar al final con referencias sin definir.
Instalar GCC, G++ y Make
En Ubuntu, Debian y Linux Mint instalamos el conjunto habitual de herramientas:
sudo apt update
sudo apt install build-essential
En Fedora podemos instalar los paquetes necesarios de forma explícita:
sudo dnf install gcc gcc-c++ make
En Arch Linux y derivadas están dentro del grupo base-devel:
sudo pacman -S base-devel
Después comprobamos qué compiladores tenemos realmente:
gcc --version
g++ --version
command -v gcc g++

whereis gcc; command -v gcc nos da directamente el ejecutable que usará la terminal.Compilar un programa en C
Creamos un archivo llamado hola.c con cualquier editor de texto:
#include <stdio.h>
int main(void)
{
puts("Hola desde C");
return 0;
}
Desde la misma carpeta lo compilamos así:
gcc -std=c17 -Wall -Wextra -Wpedantic -O0 -g hola.c -o hola
-o hola pone nombre al ejecutable. Las opciones -Wall -Wextra -Wpedantic muestran problemas que no siempre impiden compilar, pero suelen descubrir errores. -O0 -g deja el programa sin optimizaciones y añade información útil para depurarlo.
Si no aparecen errores, lo ejecutamos con:
./hola
No hace falta ejecutar chmod +x. El enlazador ya crea el resultado como archivo ejecutable.
Compilar un programa en C++
Para C++ creamos hola.cpp:
#include <iostream>
int main()
{
std::cout << "Hola desde C++\n";
return 0;
}
Esta vez utilizamos g++ y escogemos el estándar C++20:
g++ -std=c++20 -Wall -Wextra -Wpedantic -O0 -g hola.cpp -o hola-cpp
./hola-cpp

./.Compilar varios archivos por separado
Cuando un programa tiene varios archivos no necesitamos recompilarlo todo cada vez. La opción -c compila sin enlazar y produce un archivo objeto terminado en .o. Por ejemplo, si tenemos main.cpp y saludo.cpp:
g++ -std=c++20 -Wall -Wextra -Wpedantic -O0 -g -c main.cpp -o main.o
g++ -std=c++20 -Wall -Wextra -Wpedantic -O0 -g -c saludo.cpp -o saludo.o
g++ main.o saludo.o -o programa
./programa
Los dos primeros comandos comprueban cada archivo y generan objetos. El tercero los enlaza y resuelve las funciones que uno utiliza del otro. La documentación de GCC describe las etapas de preprocesado, compilación, ensamblado y enlazado, además de las salidas de -E, -S y -c.
Errores habituales al compilar
gcc: command not found: falta instalar el compilador o la terminal no lo encuentra enPATH.fatal error: archivo.h: No such file or directory: falta una cabecera o el paquete de desarrollo de una biblioteca. No se resuelve descargando una cabecera suelta de cualquier web.undefined reference: normalmente la compilación terminó, pero el enlazador no encontró una función. Puede faltar otro archivo objeto, una biblioteca o el uso deg++para C++.Permission deniedal escribir la salida: estamos compilando en una carpeta sin permisos. Es mejor trabajar dentro de nuestra carpeta personal que ejecutar el compilador consudo.
Para dos archivos, estos comandos son suficientes. Cuando el proyecto crece, un Makefile o CMake guarda las opciones y sólo recompila lo que ha cambiado. Aun así, entender primero qué hacen gcc, g++, -c y el enlazado evita que la herramienta de construcción se convierta en otra caja negra. Si algún error no queda claro, podéis copiar en los comentarios el comando y las primeras líneas del mensaje.

Hola, Como compilo desde linux ese mismo programa para ejecutarlo en Windows y no tener que pasar mis fuentes a windows y compilarlo desde alli?
Hola, existe mingw, el cual ayuda a realizar esta tarea. Se instala de la siguiente forma:
sudo apt-get install mingw32 mingw32-binutils mingw32-runtime
Y se compila de la siguiente forma:
i586-mingw32msvc-g++ -o aplicacion.exe aplicacion.cpp
Esperamos que te sirva de ayuda.