Site hosted by Angelfire.com: Build your free website today!

2.10 LA LIBRERÍA

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/

as

cg

crtso.o

end.a

libc.a

libcurses.a

libd.a

libe.a

libedit.a

libfp.a

liby.a

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

- 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

ansi

curses

editline

end

float

fphook

i386

i86

ip

liby

math

other

posix

stdio

syscall

syslib

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

Para visualizarlos utilice el comando: ar tv ansi.a

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

Muchos ficheros vienen comprimidos ansi.a.Z

compress -d ansi.a.Z

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