El sistema operativo y muchos de los comandos, utilizan procedimientos almacenados en una librería. Estos procedimientos se deben lincar cuando se genera el código binario (ejecutable) de un programa.

Para aumentar la velocidad en el lincado, estos procedimientos se encuentran ya precompilados dentro de la librería, de donde el compilador los extrae.

Las librerías para MINIX se encuentra en el directorio: /usr/lib/i386/

bullet

as

bullet

cg

bullet

crtso.o

bullet

end.a

bullet

libc.a

bullet

libcurses.a

bullet

libd.a

bullet

libe.a

bullet

libedit.a

bullet

libfp.a

bullet

liby.a

Los procedimiento que contiene una librería son de dos tipos:

  1. - Procedimientos utilizados por los usuarios.
Llamadas al sistema

Procedimientos I/O

Procedimientos varios

- open

- fopen

- atoi

- read

- getc

- isatty

- fork

- printf

- strcmp

) - Procedimientos utilizados por el compilador como parte del código generado.

- lmul, - ldiv, - csv, ...

Estos procedimientos internos son propios de cada compilador por lo que no se suministran los fuentes. Hay que utilizar los que vienen con cada compilador.

En caso de utilizar otro compilador distinto del que viene con MINIX, (como turbo C para MS-DOS) . Asegúrese que la librería del compilador solo tiene procedimientos internos, en caso de que existan llamadas al sistema estas deben quitarse.

FUENTES DE LAS LIBRERIAS DIRECTORIO /usr/src/lib

Los fuentes de los procedimientos de librería se encuentran distribuidos en los subdirectorios

bulletansi
bulletcurses
bulleteditline
bulletend
bulletfloat
bulletfphook
bulleti386
bulleti86
bulletip
bulletliby
bulletmath
bulletother
bulletposix
bulletstdio
bulletsyscall
bulletsyslib

Los fuentes de las librerías se encuentran como archivos para ahorrar espacio ya que un fichero ocupa como mínimo un bloque = 1k.

bullet

Para visualizarlos utilice el comando: ar tv ansi.a

bullet

Solo necesitan ser compilados y puestos en la librería.

bullet

Muchos ficheros vienen comprimidos ansi.a.Z

bullet

compress -d ansi.a.Z

bullet

El resultado es un fichero descomprimido ansi.a

 

INSTRUCCIONES PASO A PASO PARA CONSTRUIR UNA LIBRERÍA

Los fuentes de los procedidos de la librería están en varios subdirectorios en forma de archivo ansi.a, en vez de ficheros separados, por razón de espacios.

1) Separe los procedimientos en ficheros

ar x ansi.a

borre ansi.a (ya no sirve)

rm ansi.a

Compile todos los ficheros C que hay en ansi, ensamble todos los ficheros en código ensamblador en ansi pero no los linque.

 

Se puede realizar de forma automática con el comando make

# Makefile for the libraries

# This makefile runs make in all the subdirectories of the src/lib tree.

# See ansi/Makefile for a further explanation.

MAKE = exec make -$(MAKEFLAGS)

usage:

@echo "Usage: make all" >&2 # Compile all library functions" >&2

@echo " make install # Backup /usr/lib/*.a first!" >&2

@echo " make clean # Delete .o and .a files" >&2

@false

all:

cd ansi && $(MAKE)

cd curses && $(MAKE)

cd editline && $(MAKE)

cd end && $(MAKE)

cd float && $(MAKE)

cd fphook && $(MAKE)

cd ip && $(MAKE)

cd liby && $(MAKE)

cd math && $(MAKE)

cd other && $(MAKE)

cd posix && $(MAKE)

cd stdio && $(MAKE)

cd syscall && $(MAKE)

cd syslib && $(MAKE)

cd `arch` && $(MAKE)

install: all

$(MAKE) install_`arch`

# Installation rules for PC Minix.

LIB= /usr/lib

install_i86: \

$(LIB)/ncrtso.o \

$(LIB)/libc.a \

$(LIB)/libd.a \

$(LIB)/libe.a \

$(LIB)/libfp.a \

$(LIB)/end.a \

$(LIB)/libcurses.a \

$(LIB)/libedit.a \

$(LIB)/liby.a \

$(LIB)/ncrtso.o: ncrtso.o

install -c -o bin $? $@

$(LIB)/libc.a: libc.a

install -c -o bin $? $@

$(LIB)/libd.a: libd.a

install -c -o bin $? $@

$(LIB)/libe.a: libe.a

install -c -o bin $? $@

$(LIB)/libfp.a: libfp.a

install -c -o bin $? $@

$(LIB)/end.a: end.a

install -c -o bin $? $@

$(LIB)/libcurses.a: libcurses.a

install -c -o bin $? $@

$(LIB)/libedit.a: libedit.a

install -c -o bin $? $@

$(LIB)/liby.a: liby.a

install -c -o bin $? $@

# Installation rules for Minix-386.

LIB386= /usr/lib/i386

LIB86= /usr/lib/i86

install_i386: \

$(LIB386)/crtso.o \

$(LIB386)/libc.a \

$(LIB386)/libd.a \

$(LIB386)/libe.a \

$(LIB386)/libfp.a \

$(LIB386)/end.a \

$(LIB386)/libcurses.a \

$(LIB386)/libedit.a \

$(LIB386)/liby.a \

# $(LIB86)/libc.a \

# $(LIB86)/end.a \

$(LIB386)/crtso.o: crtso.o

install -c -o bin $? $@

$(LIB386)/libc.a: libc.a

install -c -o bin $? $@

$(LIB386)/libd.a: libd.a

install -c -o bin $? $@

$(LIB386)/libe.a: libe.a

install -c -o bin $? $@

$(LIB386)/libfp.a: libfp.a

install -c -o bin $? $@

$(LIB386)/end.a: end.a

install -c -o bin $? $@

$(LIB386)/libcurses.a: libcurses.a

install -c -o bin $? $@

$(LIB386)/libedit.a: libedit.a

install -c -o bin $? $@

$(LIB386)/liby.a: liby.a

install -c -o bin $? $@

$(LIB86)/libc.a: libc86.a

install -c -o bin $? $@

$(LIB86)/end.a: end86.a

install -c -o bin $? $@

clean:

find . -name '*.[oa]' -o -name '*.bak' | xargs rm