1.3.- Trazado del sistema de desarrollo

Para un desarrollador de Linux, puede ser importante tener ciertos conocimientos sobre la ubicación de las herramientas y de los recursos de desarrollo.

Aplicaciones

Las aplicaciones suelen ser guardadas en directorios creados para tal fin.

  • /usr/bin.- Estan las aplicaciones que proporciona el sistema para su uso general, incluyendo el desarrollo del programa.
  • /usr/local/bin o /opt.- Aplicaciones que añadenb los administradores del sistema para un ordenador central específico o para una red local.
  • /opt y /usr/local.- Están los archivos que proporcionan los vendedores y las versiones posteriores separandolas de las aplicaciones que tiene el sistema.
  • /usr/X11 o /usr/bin/X11.- Contiene el Sistema X Windows.
  • /usr/bin o /usr/local/bin.- Se encuentra el driver del compilador gcc (que hemos usado para el ejemplo anterior), pero ejecutará diferentes aplicaciones compatibles con el compilador desde /usr/lib/gcc (dependiendo del tipo de ordenador).

Archivos de cabeceras

  • /usr/include y subdirectorios.- Contiene los archivos de cabeceras que proporcionan las definiciones de las constantes y las declaraciones de las funciones de llamada al sistema y bibliotecas.
  • /usr/include/sys y /usr/include/Linux.- Aquí podemos encontrar archivos de cabeceras que dependen de la versión de Linux que esté ejecutando.
  • /usr/include/X11.- Contiene los archivos de cabeceras X Windows que se  almacenaran en estos directorios y rastrearan automáticamente el compilador adecuado.
  • /usr/include/c++.- Igual que el anterior pero para GNU C++

Podemos usar los archivos de cabeceras en subdirectorios o en lugares no estándar especificando el indicador -I (de include) al compilador C. Por ejemplo:

include_ejemplo

Esto hará que el compilador busque, tanto en el directorio /usr/openwin/include como en los lugares estándar, los archivos de cabecera incluidos en el programa fred.c. Para más información acuda a la página del manual (man gcc).

Se recomienda usar el comando grep para buscar archivos de cabeceras con definiciones específicas y con prototipos de funciones. Imagine que necesita saber el nombre de los #defines usados para retornar a la posición de salida desde un programa. Lo único que que tiene que hacer es cambiar al directorio /usr/include y grep para una posible parte del nombre:

grep_EXIT

En el ejemplo, grep busca todos los archivos del directorio cuyo nombre acabe en .h para la cadena EXIT_. En esta ocasión ha encontrado (entre otras) la definición necesaria en el archivo stdlib.h.

Archivos de biblioteca

Las bibliotecas son colecciones de funciones precompiladas que han sido escritas para que se puedan volver a usar. Normalmente, están compuestas de conjuntos de funciones relacionadas que realizan una tarea común. Podemos encontrar bibliotecas de funciones relacionadas que realizan una tarea común. Podemos encontrar bibliotecas comunes sobre la administración de la pantalla (bibliotecas curses y ncurses) y rutinas de acceso a bases de datos (bibliotecas dbm). A lo largo de este tutorial encontraremos diferentes bibliotecas.

Las bibliotecas de sistema estándar se suelen guardar en /lib/ y en /usr/lib. Hay que indicar al compilador C (o más concretamente al enlazador) qué bibliotecas ha de buscar, ya que, por defecto, busca únicamente la biblioteca estándar C.

El nombre de archivo de una biblioteca comienza siempre por lib. A continuación del nombre va una parte que indica de qué biblioteca se trata (como c para las bibliotecas de C, o m parta una biblioteca matemática). La última parte del nombre comienza con un punto (.) y especifica el tipo de biblioteca.

  • .a.- Para las bibliotecas estáticas tradicionales.
  • .so.- Para las bibliotecas compartidas.

Las bibliotecas suelen existir en formato estático y compartido, tal como mostrará rapidamente /usr/lib. Puede indicarle al compilador que busque una biblioteca proporcionándole todo el nombre de ruta o usando el indicador -l. Por ejemplo:

ejemplo_gcc_fred1

Le indica al compilador que ha de compilar el archivo fred.c, llamar al archivo del programa resultante fred, y buscar la biblioteca matemática junto al estándar C para resolver las referencias a las funciones. Con el siguiente comando obtenemos un resultado similar.

Ejemplo_gcc_fred2

-lm (sin espacio entre la l y m) es una abreviación de la biblioteca denominada libm.a en unos de los directorios de biblioteca estándar (en este caso /usr/lib). Otra de las ventajas de la notación -lm es que el compilador elegirá de manera automática la biblioteca compartida siempre que exista.

Aunque las bibliotecas, al igual que los archivos de cabecera, se suelen encontrar en lugares estándar, puede añadirlo a los directorios de búsqueda usando el indicador -L (mayúscula) para el compilador. Por ejemplo:

Ejemplo_gcc_fred3

compilará y enlazará un programa denominado x11fred usando la versión de la biblioteca libx11 que se encuentra en el directorio /usr/openwin/lib.

Biblioteca estática

La biblioteca más sencilla está compuesta por una colección de archivos objeto, todos ellos dentro de un formulario listo para su uso. Cuando un programa necesita usar una función que se encuentra en una biblioteca, incluye un archivo de cabecera que declara la función. El compilador y el enlazador se ocupan de combinar el código del programa y la biblioteca en un solo programa ejecutable. debe usar la opción -l para indicar qué bibliotecas necesitan (distintas a la biblioteca C estándar de tiempo de ejecución).

Los nombres de las bibliotecas  estáticas, también conocidas como archivos, suelen acabar con .a. Por ejemplo, /usr/lib/libc.a para bibliotecas en C estándar y /usr/lib/libX11.a para la X11.

Puede crear y conservar fácilmente sus propias bibliotecas usando el programa ar (para el archivo) y compilando las funciones por separado con gcc -c. Intente conservar las funciones en archivos fuente independientes siempre que sea posible. Si las funciones tienen que acceder a los datos comunes, puede introducirlas en el mismo archivo fuente y usar las variables estáticas declaradas en dicho archivo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s