Instructivo de Compilación Pascal en Linux

Describimos los pasos para escribir programas Pascal en Linux, compilarlos y ejecutarlos.

Abrir una terminal

El primer paso, luego de ingresar al sistema con nuestro usuario y contraseña, es abrir un emulador de terminal o terminal a secas. No explicamos cómo hacer esta operación porque será diferente según la distribución Linux que tengamos instalada en nuestro equipo (Ubuntu, Fedora, Suse, etc.) y del entorno de escritorio (KDE, Gnome, etc.). Si existe un menú de aplicaciones, seguramente la terminal estará accesible en un primer nivel o bajo algún submenú de accesorios o herramientas del sistema. En algunos entornos se puede hacer una búsqueda dentro de las aplicaciones. Se recomienda que el usuario configure su escritorio para tener la terminal disponible desde algún lanzador rápido de aplicaciones o que se abra automáticamente al entrar. En el mundo Linux, todo es configurable y cada usuario hace su entorno a su gusto y medida. No será un buen usuario Linux aquel que se conforme con las configuraciones por defecto.

Entendiendo el sistema de archivos

Es muy importante entender cómo está organizado el sistema de archivos Linux. Hay una serie de conceptos que es necesario manejar. No podrá sobrevivir en el mundo Linux si no aprende rápidamente algunas cosas como:

  • directorio origen
  • directorio actual o corriente
  • caminos relativos y absolutos
  • comandos ls, cd, pwd

Recomendamos la lectura del siguiente tutorial para entender estos conceptos:

Learning the Shell. Navigation

Un breve resumen puede encontrarse en la página de ayuda de la URI de facultad:

Comandos básicos de shell. Terminal

Verificar la instalación del compilador

Se requiere que el compilador Free Pascal esté previamente instalado en nuestro equipo. Para verificarlo:

fpc
Free Pascal Compiler version 3.0.4 [2017/10/02] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
/usr/bin/fpc [options] <inputfile> [options]
 Only options valid for the default or selected platform are listed.
 Put + after a boolean switch option to enable it, - to disable it.
  @<x>   Read compiler options from <x> in addition to the default fpc.cfg
  -a     The compiler does not delete the generated assembler file
      -al        List sourcecode lines in assembler file
      -an        List node info in assembler file (-dEXTDEBUG compiler)

Al ingresar el comando fpc sin argumentos, se despliega información de ayuda sobre las opciones del compilador. En caso de que el compilador no esté instalado, aparecerá un mensaje indicando que el comando ingresado no existe. Si este fuera el caso, deberá instalar el compilador.

Sobre IDEs y otras yerbas

Empecemos por explicar que es un IDE. El acrónimo viene de Integrated Develompent Environment lo cual puede (mal) traducirse como Entorno Integrado de Desarrollo. El término IDE hace referencia a una herramienta que es fundamental para todo desarrollador. Esta herramienta integra de manera cómoda, amigable y productiva todos los procesos vinculados al desarrollo de programas. Esto incluye entre otras prestaciones:

  • Escritura y edición del código fuente
  • Invocación al compilador
  • Detección y corrección de errores de compilación.
  • Depuración de errores (debugger)

Un programador profesional prácticamente no puede vivir si no dispone de un buen IDE. Un estudiante de Programación 1 no necesita para (casi) nada un IDE.

Lo cierto es que la distribución de Free Pascal viene con un IDE que queda instalado junto con el compilador. Recomendamos enfáticamente que no use el IDE de Free Pascal. En general, sugerimos que no use ningún IDE en este curso. Nuestra experiencia nos muestra que esta herramienta genera confusiones y no permite entender con claridad las diferentes etapas del proceso de programación.

Nuestros ambiente de desarrollo estará formado por:

  • un editor de texto. Por ejemplo kate o gedit. Estos editores se instalan junto con el entorno gráfico de su equipo. Puede utilizar cualquier otro editor de su preferencia.
  • el compilador Pascal fpc.
  • documentación en línea de Free Pascal (http://www.freepascal.org/docs.var)
  • y la terminal que será nuestra herramienta efectiva de integración (creo que ya les comenté que un verdadero habitante del mundo Linux no se separa jamás de la terminal).

Organizar el ambiente de trabajo

Es importante tener una buena organización de los archivos con los que trabajamos. Cada usuario buscará la manera más apropiada de hacerlo. Aquí damos un ejemplo de una mínima organización que será útil para ser más productivo al trabajar.

Primero consideremos que el estudiante está cursando más de una asignatura. Aunque no fuera así, más adelante seguramente cursará otras. Se impone crear un directorio de nombre prog1. Luego se podría ir creando carpetas por cada práctico, incluso diferentes carpetas por ejercicio. Sin exageraciones, las carpetas lo ayudarán a tener sus archivos más ordenados. Podríamos tener algo así:

    yop1 
     |
     +- prog1
           |
           +-------- practico1
           |
           +-------- practico2 
                      |
                      +--- ejercicio1
                      |
                      +---- ejercicio2

Estamos suponiendo que su usuario es yop1 y su directorio origen se llama igual y su camino absoluto es /home/yop1. La estructura de directorios es un ejemplo de estructura jerárquica o arborescente. Una estructura tal podría fácilmente crearse con el gestor de archivos de su entorno gráfico. Pero con igual facilidad se crea con unos pocos comandos en la terminal.

    $ cd
    $ mkdir prog1
    $ cd prog1
    $ mkdir practico1
    $ mkdir practico2
    $ cd practico2
    $ mkdir ejercicio1
    $ mkdir ejercicio2

Y de esa manera puede crear la estructura que usted considere más apropiada. La idea es que cada vez que se va a escribir un programa debería decidir previamente donde va a residir.

En el ejemplo anterior hemos puesto el carácter $ representando lo que se denomina el prompt de la shell. El prompt es el texto que escribe la shell para indicarnos que está lista para aceptar comandos. En general este prompt viene configurado por defecto con alguna información útil para el usuario; por ejemplo en las salas Linux de la facultad el prompt es algo así:

   [jjperez@pcunix101 ~]$

donde jjperez es el nombre de usuario, pcunix101 es el nombre de la pc y ~ es el directorio corriente. En este tutorial, supondremos que tenemos el prompt minimal $.

Picando Código

Llegó el momento de escribir un programa. Supongamos, para fijar ideas, que se trata del ejercicio 2 del práctico 2. Parece razonable guardarlo en /home/yop1/prog1/practico2/ejercicio2.

Comenzamos por abrir el editor de texto, en nuestro caso será el kate. Este se puede abrir desde el entorno gráfico, pero lo haremos de la terminal:

    $ kate &

El carácter & es importante para arrancar el editor kate y que la terminal quede libre para seguir ejecutando comandos. Escribimos en el kate un clásico (aunque poco útil) primer programa:

    program hola;
    begin
            writeln('hola gente')
    end.

Lo salvamos con el nombre hola.pas. Debe tener especial cuidado en que se guarde con ese nombre y en el directorio deseado. Una vez que lo salve con la extensión .pas el kate se enterará de que se trata de código Pascal y va a decorar de forma bonita y apropiada su código. La mayoría de los editores de texto tienen esa facilidad (resaltado de sintaxis).

El archivo hola.pas es lo que llamamos el programa fuente o fuente a secas.

Volvamos a la terminal y verifiquemos que el archivo está donde debe estar.

    $ cd ~/prog1/practico2/ejercicio2
    $ ls
    hola.pas

A compilar

Entonces, invocamos el compilador:

    $ fpc -Co -Cr -Miso -gl hola.pas

Se impone analizar este comando palabra por palabra:

  • fpc es el nombre del compilador Free Pascal.
  • hola.pas es el nombre del archivo que contiene el programa fuente (código Pascal).
  • -Co -Cr son opciones que le indican al compilador que debe generar el control de rangos y desborde de operaciones aritméticas.
  • -gl hace que el compilador en caso de error en tiempo de ejecución, indique la línea del código fuente donde se produce dicho error.
  • -Miso es una opción que hace que el compilador se aproxime más al Pascal estándar (el del libro).

Es muy importante que indique estas opciones, para asegurarse que sus programas ejecutan sin errores.

Tenga en cuenta que Linux es un sistema "case sensitive" (esto quiere decir sensible a la diferencia entre minúsculas y mayúsculas). Por lo tanto el compilador no interpretará adecuadamente si se pone por ejemplo: -co -cr -miso -gl, o -CO -CR -MISO -GL, o -cO -CR -miso -gL, etc. Lo correcto es usar: -Co -Cr -Miso -gl.

Si la compilación no tiene errores aparecerá algo así en la terminal:

$ fpc -Co -Cr -Miso -gl hola.pas
Free Pascal Compiler version 3.0.4 [2017/10/02] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling hola.pas
Linking hola
/usr/bin/ld: aviso: link.res contiene secciones de salida. ¿Olvidó -T?
4 lines compiled, 0.1 sec

Nota: el mensaje de advertencia (o warnig):

    /usr/bin/ld: aviso: link.res contiene secciones de salida. ¿Olvidó -T?

se debe a un bug (o error) del programa /usr/bin/ld que ya fue solucionado, pero que emite ese mensaje de warning, y que no afecta en el proceso de compilación. Por más información ver: http://www.freepascal.org/faq.var#unix-ld219

Supongamos ahora, que nos equivocamos al ingresar el programa y escribimos writel en lugar de writeln.

program hola;
begin
  writel('hola gente')
end.

En este caso, el compilador nos informará que encontró errores en el código y abortará la ejecución:

$ fpc -Co -Cr -Miso -gl hola.pas
Free Pascal Compiler version 3.0.4 [2017/10/02] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling hola.pas
hola.pas(3,2) Error: Identifier not found "writel"
hola.pas(5) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode

Notar que hay una línea que nos explica cuál fue el error encontrado e incluso nos indica la posición del error dentro del archivo. En algunos casos, el mensaje del compilador puede no ser tan claro.

En este caso, debemos volver al editor de texto, corregir el programa, salvar y volver a compilar. Ese proceso se repite hasta que no haya errores de compilación.

Ejecútese

Si la compilación tuvo éxito, se genera en el mismo directorio un par de archivos: hola.o y hola. El primero no resulta de mayor utilidad y lo puede borrar. El segundo es el ejecutable o binario que fue generado por el compilador. Eso significa que ya podemos ejecutar nuestro programa:

$ ./hola
hola gente

El programa puede contener errores en la ejecución y el resultado puede no ser el esperado. En ese caso volvemos al fuente en el editor, buscamos el error, corregimos, salvamos y arrancamos nuevamente el proceso de compilación. Así se continúa hasta que no haya errores.

Y hasta aquí llegamos con el instructivo. Buena programación.

Última modificación: lunes, 5 de agosto de 2019, 10:28