Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
tutorial_de_compilacion [2022/08/19 19:03] – peron | tutorial_de_compilacion [2024/05/16 16:48] (actual) – [Conclusión] peron | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Tutorial de compilación ====== | ====== Tutorial de compilación ====== | ||
- | Antes de la computación hogareña, los [[pubnix|sistemas | + | Con anterioridad |
Por tal motivo, este tutorial te ilustrará con ejemplos básicos cómo se traduce el código fuente de un programa en lenguaje C de alto nivel a un programa ejecutable en este sistema compartido y otros compatibles. | Por tal motivo, este tutorial te ilustrará con ejemplos básicos cómo se traduce el código fuente de un programa en lenguaje C de alto nivel a un programa ejecutable en este sistema compartido y otros compatibles. | ||
- | >Este tutorial no es uno de programación, | + | >Este tutorial no es uno de programación, |
===== Introducción ===== | ===== Introducción ===== | ||
Línea 13: | Línea 13: | ||
La diferencia radica en que los lenguajes de alto nivel son // | La diferencia radica en que los lenguajes de alto nivel son // | ||
- | El lenguaje C diseñado por Dennis Ritchie (uno de los creadores de Unix) es uno de tales lenguajes de alto nivel, y se revela especialmente útil para la programación portable. Podrás utilizarlo en Texto-plano no sólo para emprender proyectos avanzados, sino también para aprender los pasos fundamentales para opera con lenguajes de alto nivel: | + | El lenguaje C diseñado por Dennis Ritchie (uno de los creadores de Unix) es uno de tales lenguajes de alto nivel, y se revela especialmente útil para la programación portable. Podrás utilizarlo en Texto-plano no sólo para emprender proyectos avanzados, sino también para aprender los pasos fundamentales para operar |
===Programación === | ===Programación === | ||
Línea 19: | Línea 19: | ||
La programación es un arte. Involucra una serie de procesos mujer/ | La programación es un arte. Involucra una serie de procesos mujer/ | ||
- | Consideremos el orden de los procesos de la programación: | + | Consideremos el orden de los //procesos de la programación//: |
- | | **Acción realizada: | + | ^ **Acción realizada: |
|// | |// | ||
|// | |// | ||
Línea 31: | Línea 31: | ||
- | Como puede verse, los últimos 4 pasos // | + | Como puede verse, los últimos 4 pasos // |
- | En nuestro sistema compartido utilizaremos el conjunto de compiladores **CC** (puedes también utilizar **GCC**, | + | En nuestro sistema compartido utilizaremos el conjunto de compiladores **CC** (en [[GNU|GNU/ |
===== Compilación básica ===== | ===== Compilación básica ===== | ||
- | La manera más simple de compilar consiste en llamar a CC es esta manera: | + | La manera más simple de compilar consiste en llamar a CC, así: |
<code bash>cc codigo_fuente.c –o binario_ejecutable</ | <code bash>cc codigo_fuente.c –o binario_ejecutable</ | ||
- | De esta manera, | + | CC oficiará de compilador automático, |
>Incluso es opcional la opción '' | >Incluso es opcional la opción '' | ||
Línea 55: | Línea 55: | ||
<code bash> | <code bash> | ||
- | mkdir ~/ | + | mkdir -p ~/ |
cd ~/ | cd ~/ | ||
</ | </ | ||
Línea 67: | Línea 67: | ||
int main() | int main() | ||
{ | { | ||
- | printf(" | + | printf(" |
return 0; | return 0; | ||
Línea 92: | Línea 92: | ||
Si bien la compilación automática es sumamente simple y conveniente, | Si bien la compilación automática es sumamente simple y conveniente, | ||
- | ¡Aprenderemos, en cambio, los cuatro pasos de la compilación | + | ¡Aprendamos, en cambio, los cuatro pasos de la compilación, esta vez compilando |
==== Microtetris ==== | ==== Microtetris ==== | ||
- | Compila manualmente ahora un clon del Tetris. | + | Compila manualmente ahora un clon del Tetris. |
Crea un directorio de trabajo para el juego: | Crea un directorio de trabajo para el juego: | ||
Línea 103: | Línea 103: | ||
...ya en este directorio, crea el fichero '' | ...ya en este directorio, crea el fichero '' | ||
- | Ahora compila, pero siguiendo los 4 pasos maquinales de la compilación manual: | + | Ahora compila siguiendo los 4 pasos maquinales de la compilación manual: |
=== 1. Preprocesar === | === 1. Preprocesar === | ||
Primero preprocesa este //código fuente// '' | Primero preprocesa este //código fuente// '' | ||
- | <code bash>cc microtetris.c -E -o microtetris.p</ | + | <code bash>cc microtetris.c -E -o microtetris.i</ |
- | Obtendrás así un fichero de //código fuente preprocesado// | + | Obtendrás así un fichero de //código fuente preprocesado// |
=== 2. Compilar === | === 2. Compilar === | ||
Línea 159: | Línea 159: | ||
Elimina los ficheros intermedios del proceso de compilación: | Elimina los ficheros intermedios del proceso de compilación: | ||
- | <code bash>rm ~/ | + | <code bash>rm ~/ |
Si lo deseas, también puedes eliminar el código fuente. | Si lo deseas, también puedes eliminar el código fuente. | ||
Línea 189: | Línea 189: | ||
=== Librerías === | === Librerías === | ||
- | Muchos programas de cierta entidad suelen hacer uso de // | + | Muchos programas de cierta entidad suelen hacer uso de // |
- | Por ejemplo, si la de un fichero '' | + | Por ejemplo, si nuestro |
<code bash>cc –c programa.c –lcurses –o programa.o</ | <code bash>cc –c programa.c –lcurses –o programa.o</ | ||
- | Si la librería no es una librería estándar | + | Si la librería no es una librería estándar |
<code bash>cc –c programa.c –L./ | <code bash>cc –c programa.c –L./ | ||
- | |||
- | === Optimizaciones === | ||
- | |||
- | CC permite optimizar el código generado. Existen 3 etapas de optimización de código objeto: | ||
- | |||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | |||
==== Arkurses ==== | ==== Arkurses ==== | ||
- | Sabiendo todo esto, introduce y compila [[arkurses.c|el código fuente de Arkurses]]. Se trata de un clon del juego Arkanoid que utiliza la funciones de las librerías de gráficas de terminal //ncurses// y //panel//. | + | Sabiendo todo esto, introduce y compila [[arkurses.c|el código fuente de Arkurses]]. Se trata de un clon del juego Arkanoid que utiliza la funciones de las librerías de gráficas de terminal //ncurses// y //panel//. Aprovecharemos para indicar también el comando **time**, que nos indicará el tiempo de procesador requerido por cada tarea de cómputo. |
Para afrontar las dificultades indicadas anteriormente, | Para afrontar las dificultades indicadas anteriormente, | ||
<code bash> | <code bash> | ||
- | cc arkurses.c -lpanel -lncurses -o arkurses -Os -march=native | + | time cc arkurses.c -lpanel -lncurses -o arkurses -Os -march=native |
</ | </ | ||
Línea 221: | Línea 211: | ||
<code bash> | <code bash> | ||
#preprocesa y muestra el código parseado | #preprocesa y muestra el código parseado | ||
- | cc arkurses.c -E -o arkurses.p | + | time cc arkurses.c -E -o arkurses.i |
#compila arkurses.c con sus librerías y muestra el ensamblador resultante: | #compila arkurses.c con sus librerías y muestra el ensamblador resultante: | ||
- | cc arkurses.c -lpanel -lncurses -Os -S -march=native ; cat arkurses.s ; | + | time cc arkurses.c -lpanel -lncurses -Os -S -march=native ; cat arkurses.s ; |
#ensambla | #ensambla | ||
- | cc arkurses.s -lpanel -lncurses -c -Os -march=native -o arkurses.o ; | + | time cc arkurses.s -lpanel -lncurses -c -Os -march=native -o arkurses.o ; |
#enlaza todo y crea el binario de salida | #enlaza todo y crea el binario de salida | ||
- | cc arkurses.o -lpanel -lncurses -o arkurses.out -Os -march=native ; | + | time cc arkurses.o -lpanel -lncurses -o arkurses.out -Os -march=native ; |
#Renombra el fichero de salida de compilación | #Renombra el fichero de salida de compilación | ||
Línea 242: | Línea 232: | ||
Luego elimina los sobrantes y deja el ejecutable, con | Luego elimina los sobrantes y deja el ejecutable, con | ||
- | <code bash>rm arkurses.c arkurses.p arkurses.s arkurses.o</ | + | <code bash>rm arkurses.c arkurses.i arkurses.s arkurses.o</ |
==== Conclusión ==== | ==== Conclusión ==== | ||
+ | |||
+ | Felicitaciones ¡Ya compilaste tu primer programa en C en texto-plano.xyz! Comparte tu logro con [[gab]]: | ||
+ | |||
+ | <code bash> | ||
+ | gab -m " | ||
+ | </ | ||
Preprocesar, | Preprocesar, |