Dynamic libraries com libtool
Este artigo tem como objetivo dar uma pequena noção de como utilizar a ferramenta libtool para gerar uma biblioteca dinâmica, os famosos libalgumacoisa.so. Isso permite que você linke várias funções que são usadas em vários códigos numa mesma biblioteca.
O Makefile
Caros, achei mais fácil usar um Makefile como base para discutirmos o andamento de cada passo da compilação e link. Não irei me aprofundar muito, mas minha base de estudos se encontra em:
Mãos à obra então. Segue o Makefile que iremos trabalhar:
Nele percebemos 4 seções, all, clean, install, e uninstall.
Mãos à obra então. Segue o Makefile que iremos trabalhar:
OBJECTS=fonte1.o fonte2.o
all:
@for x in *.c ; do echo " [CC] $$x -> `basename $$x .c`.o" ;libtool --silent --mode=compile gcc -c $$x; done
@echo " [LD] ${OBJECTS} -> libteste.la"
@libtool --silent --mode=link gcc -export-dynamic -no-undefined -rpath /usr/local/lib -o libteste.la *.lo
clean:
@rm -f *.o *~ *.lo *.la
install:
@libtool --silent --mode=install cp libast.la /usr/local/lib
@cp ast.h /usr/local/etc
uninstall:
@libtool --silent --mode=uninstall rm -f /usr/local/lib/libteste*
all:
@for x in *.c ; do echo " [CC] $$x -> `basename $$x .c`.o" ;libtool --silent --mode=compile gcc -c $$x; done
@echo " [LD] ${OBJECTS} -> libteste.la"
@libtool --silent --mode=link gcc -export-dynamic -no-undefined -rpath /usr/local/lib -o libteste.la *.lo
clean:
@rm -f *.o *~ *.lo *.la
install:
@libtool --silent --mode=install cp libast.la /usr/local/lib
@cp ast.h /usr/local/etc
uninstall:
@libtool --silent --mode=uninstall rm -f /usr/local/lib/libteste*
Nele percebemos 4 seções, all, clean, install, e uninstall.
- na seção all é onde estão as regras que serão executadas ao comando 'make' no console;
- clean serve para removermos os arquivos compilados, deixando apenas os fontes.c;
- install contém regras para a instalação;
- e uninstall para a desinstalação.