Herramientas de usuario

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
tutorial_de_compilacion [2022/09/06 01:52] – [Microtetris] perontutorial_de_compilacion [2026/04/21 16:09] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
-====== Tutorial de compilación ======+====== Tutorial de compilación en C ======
  
-Con anterioridad de la [[microcomputadora#microcomputadoras hogareñas|computación hogareña]], los [[pubnix|sistemas multiusuairi@]] constituyeron el principal medio para programar.+Con anterioridad de la [[microcomputadora#microcomputadoras hogareñas|computación hogareña]], los [[pubnix|sistemas multiusuari@]] constituyeron el principal medio para programar.
  
 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, utilizaremos código pre-hecho.+>Este tutorial no es uno de programación, utilizaremos código pre-hecho. Si deseas programar, puedes acceder a [[https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C|Wikilibro de Programación en C]] o [[https://trspos.com/c-programming/|recursos en línea trspos]], entre [[el lenguaje de programación C|muchas otras recomendables]].
  
 ===== Introducción ===== ===== Introducción =====
Línea 13: Línea 13:
 La diferencia radica en que los lenguajes de alto nivel son //portables//, mientras que los de bajo nivel - además de ser más difíciles de aprender - están imbuidos de las particularidades del microprocesador en donde se ejecutan. Aprender los lenguajes de alto nivel permite escribir programas para múltiples computadoras, que sean -además - más simples de compartir. La diferencia radica en que los lenguajes de alto nivel son //portables//, mientras que los de bajo nivel - además de ser más difíciles de aprender - están imbuidos de las particularidades del microprocesador en donde se ejecutan. Aprender los lenguajes de alto nivel permite escribir programas para múltiples computadoras, que sean -además - más simples de compartir.
  
-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: su compilación.+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 con lenguajes de alto nivel: lo que llamamos //procesos de la programación//, o - de forma genérica - la //compilación//.
  
 ===Programación === ===Programación ===
Línea 19: Línea 19:
 La programación es un arte. Involucra una serie de procesos mujer/máquina para resolver un problema determinado. La programación es un arte. Involucra una serie de procesos mujer/máquina para resolver un problema determinado.
  
-Consideremos el orden de los procesos de la programación:+Consideremos el orden de los //procesos de la programación//:
  
-**Acción realizada:** **Genera:** |**Opción de CC para detener en este paso:** |+**Acción realizada:** **Genera:** ^**Opción de CC para detener en este paso:** ^
 |//Imaginar// | Percepción de un problema | | |//Imaginar// | Percepción de un problema | |
 |//Considerar un problema __de programación__// |código //in mente// | (esto es Cerebral) | |//Considerar un problema __de programación__// |código //in mente// | (esto es Cerebral) |
Línea 31: Línea 31:
  
  
-Como puede verse, los últimos 4 pasos //maquinales// de la programación con lenguajes de alto nivel son practicados por medio de un **Compilador**, un programa de computadora capaz de traducir el //código fuente// escrito en un lenguaje en otro lenguaje distinto de operación (el //código destino//).+Como puede verse, los últimos 4 pasos //maquinales// de la programación con lenguajes de alto nivel son practicados por medio de un **Compilador**, un programa de computadora capaz de traducir el //código fuente// escrito en un lenguaje en otro lenguaje de operación distinto (el //código destino//).
  
  
-En nuestro sistema compartido utilizaremos el conjunto de compiladores **CC** (puedes también utilizar **GCC**, en [[GNU|GNU/Linux]]). Este super-compilador por línea de comandos es capaz de afrontar en traducir tu código o cualquiera que te hayan compartido.+En nuestro sistema compartido utilizaremos el conjunto de compiladores **CC** (en [[GNU|GNU/Linux]] puedes también utilizar **GCC**). Este super-compilador por línea de comandos es capaz de afrontar en traducir tu código fuente propio bien cualquiera que te hayan compartido.
  
  
 ===== 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> <code bash>cc codigo_fuente.c –o binario_ejecutable</code>
  
-De esta manera, CC oficiará de compilador automático, y procesará un fichero de código fuente llamado ''codigo_fuente.c'' para generar como resultado un fichero de destino ejecutable, llamado ''binario_ejecutable''. Si todo va bien, CC será tan parco que no informará nada, simplemente compilará y creará el ejecutable sin más decir.+CC oficiará de compilador automático, y procesará un fichero de código fuente llamado ''codigo_fuente.c'' para generar como resultado un fichero de destino ejecutable, llamado ''binario_ejecutable''. Si todo va bien, CC será tan parco que no informará nada, simplemente compilará y creará el ejecutable sin decir más.
  
 >Incluso es opcional la opción ''-o'' que indica el fichero ejecutable de destino: si no la incluyes , CC almacenará el resultado de la compilación en un fichero ejecutable de nombre llamado genéricamente ''a.out''. >Incluso es opcional la opción ''-o'' que indica el fichero ejecutable de destino: si no la incluyes , CC almacenará el resultado de la compilación en un fichero ejecutable de nombre llamado genéricamente ''a.out''.
Línea 61: Línea 61:
 Ya en tu directorio ''~/src/holamundo'', [[editores de texto|usa tu editor favorito para crear un fichero]] llamado ''holamundo.c'', e incorpórale el siguiente //código fuente// en lenguaje C: Ya en tu directorio ''~/src/holamundo'', [[editores de texto|usa tu editor favorito para crear un fichero]] llamado ''holamundo.c'', e incorpórale el siguiente //código fuente// en lenguaje C:
  
-<code c>+<file c holamundo.c>
 // * * * Programa simple en C para mostrar "Hola Tercer Mundo!" * * * // * * * Programa simple en C para mostrar "Hola Tercer Mundo!" * * *
 #include <stdio.h> #include <stdio.h>
Línea 67: Línea 67:
 int main() int main()
 { {
-    printf("Hola Tercer Mundo!");+    printf("Hola Tercer Mundo!\n");
    
     return 0;     return 0;
 } }
-</code>+</file>
 Guarda los cambios y vuelve al Shell. Guarda los cambios y vuelve al Shell.
  
Línea 92: Línea 92:
 Si bien la compilación automática es sumamente simple y conveniente, ¡no nos muestra los pasos intermedios, y tampoco es tan divertida! Si bien la compilación automática es sumamente simple y conveniente, ¡no nos muestra los pasos intermedios, y tampoco es tan divertida!
  
-¡Aprenderemos, en cambio, los cuatro pasos de la compilación con un juego!+¡Aprendamos, en cambio, los cuatro pasos de la compilación, esta vez compilando un [[juegos|juego]]!
  
 ==== Microtetris ==== ==== Microtetris ====
Línea 103: Línea 103:
 ...ya en este directorio, crea el fichero ''[[microtetris.c]]''. El código fuente en lenguaje C requirió un gran trabajo de estudio a un par de programador@s, y ocupa 9,6K. No olvides guardarlo y volver al shell. ...ya en este directorio, crea el fichero ''[[microtetris.c]]''. El código fuente en lenguaje C requirió un gran trabajo de estudio a un par de programador@s, y ocupa 9,6K. No olvides guardarlo y volver al shell.
  
-Ahora compila siguiendo los 4 pasos maquinales de la compilación manual. Opcionalmente, le indicaremos también el comando **time** que nos indicará el tiempo de procesador requerido por cada tarea de cómputo.+Ahora compila siguiendo los 4 pasos maquinales de la compilación manual:
  
 === 1. Preprocesar === === 1. Preprocesar ===
 Primero preprocesa este //código fuente// ''microtetris.c'', analizándolo con el //párser// de CC: Primero preprocesa este //código fuente// ''microtetris.c'', analizándolo con el //párser// de CC:
  
-<code bash>time cc microtetris.c -E -o microtetris.i</code>+<code bash>cc microtetris.c -E -o microtetris.i</code>
  
 Obtendrás así un fichero de //código fuente preprocesado// de ''microtetris.i'' (en este caso "se inflará" pensando unos 41K). Si deseas curiosear el código preprocesado (o "parseado"), utiliza **cat microtetris.i**. Obtendrás así un fichero de //código fuente preprocesado// de ''microtetris.i'' (en este caso "se inflará" pensando unos 41K). Si deseas curiosear el código preprocesado (o "parseado"), utiliza **cat microtetris.i**.
Línea 115: Línea 115:
 Una vez parseado, podrás compilar tu código fuente con: Una vez parseado, podrás compilar tu código fuente con:
  
-<code bash>time cc microtetris.c -S</code>+<code bash>cc microtetris.c -S</code>
  
 La compilación del código fuente traducirá el código fuente de alto nivel en un código fuente de bajo nivel específico para el procesador de la máquina, llamado //código de lenguaje ensamblador// (el fiuchero se llamara ''micreotetris.s''). La compilación del código fuente traducirá el código fuente de alto nivel en un código fuente de bajo nivel específico para el procesador de la máquina, llamado //código de lenguaje ensamblador// (el fiuchero se llamara ''micreotetris.s'').
Línea 126: Línea 126:
  
 Ensambla el código en lenguaje ensamblador: Ensambla el código en lenguaje ensamblador:
-<code bash>time cc microtetris.s -c -o microtetris.o</code>+<code bash>cc microtetris.s -c -o microtetris.o</code>
  
 Obtendrás ahora el //código objeto// ''microtetris.o'', que corresponda a la arquitectura del sistema. Este se ha reducido (en este caso, hasta unos 17K). Obtendrás ahora el //código objeto// ''microtetris.o'', que corresponda a la arquitectura del sistema. Este se ha reducido (en este caso, hasta unos 17K).
Línea 136: Línea 136:
 Para crear el ejecutable código máquina binario debes entrelazar este código objeto (incluyendo sus librerías, si las tuviese), y sumarle los encabezados. De todo ello se encarga el enlazador de CC: Para crear el ejecutable código máquina binario debes entrelazar este código objeto (incluyendo sus librerías, si las tuviese), y sumarle los encabezados. De todo ello se encarga el enlazador de CC:
  
-<code bash>time cc microtetris.o -o microtetris.out</code>+<code bash>cc microtetris.o -o microtetris.out</code>
  
 Lograrás así final el fichero ejecutable de salida, consistente en el //binario de código máquina// ''microtetris.out'' (ya de 15K, los que requerirá para cargarse en la memoria de texto-plano). Lograrás así final el fichero ejecutable de salida, consistente en el //binario de código máquina// ''microtetris.out'' (ya de 15K, los que requerirá para cargarse en la memoria de texto-plano).
Línea 199: Línea 199:
 <code bash>cc –c programa.c –L./libs/librería-programa –o programa.o</code> <code bash>cc –c programa.c –L./libs/librería-programa –o programa.o</code>
 ==== 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, compílalo automáticamente de esta manera: Para afrontar las dificultades indicadas anteriormente, compílalo automáticamente de esta manera:
  
 <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
 </code> </code>
  
Línea 211: 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.i  -march=native ; cat arkurses.i ;+time cc arkurses.c -E -o arkurses.i  -march=native ; cat 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 234: Línea 234:
 <code bash>rm arkurses.c arkurses.i arkurses.s arkurses.o</code> <code bash>rm arkurses.c arkurses.i arkurses.s arkurses.o</code>
 ==== 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 "¡Acabo de escribir, compilar y ejecutar mi primer programa en C!"
 +</code>
  
 Preprocesar, base para compilar. Compilar, base para ensamblar. Ensamblar, base para enlazar. Y enlazar, base para Ejecutar. Preprocesar, base para compilar. Compilar, base para ensamblar. Ensamblar, base para enlazar. Y enlazar, base para Ejecutar.
 +
 +Ver también: [[Tutorial de Compilación en Fortran]]

Este sitio web utiliza cookies para guardar datos esenciales de su actividad, como su autenticación. Al entrar acepta el uso de cookies.

Más información