En otros post anteriores vimos la escencia de las bibliotecas
así como de libtool, si
además haz realizado aunque sea un “hello world” con autotools entonces ahora veamos como integramos a
libtool con autotool para la creación de una biblioteca.
#configure.ac
LT_INIT: Es la forma en que
actualmente se define LIBTOOL.
# Checks for programs.
AC_PROG_CXX: Chequea por un
compilador para c++.
AC_PROG_AWK: Chequea gawk,
mawk, nawk, and awk, en ese orden y lo establece como variable.
AC_PROG_CC: Chequea por un
compilador para c.
AC_PROG_CPP: Muetra el valor de
la variable CPP que contiene el preprocesador.
AC_PROG_INSTALL: Muetra el valor
de la variable INSTALL para instalación.
AC_PROG_LN_S: Chequea que ls
sistema en que te encuentras soporta links simbólicos(ln -s), en
caso que este no esté disponible lo establece a ln, en otro caso a
cp -pR.
AC_PROG_MAKE_SET: Establece el
comando make.
#lib/Makefile.am:
CLEANFILES: Para que make
clean borre los archivos que coincidan.
AM_CPPFLAGS: El contenido de
esta variable es pasado a todas las reglas de compilación que
invoquen el preprocesador de C.
Definiciones para el uso de pkg-config
una vez creada la lib.
pkgconfigdir = @libdir@/pkgconfig
pkgconfig_DATA = libmatX.pc
A diferencia del primer
ejemplo donde poniamos bin_PROGRMAS para crear ejecutables aquí
usamos esta macro a la cual le decimo el nombre de la lib a crear y
en el source debe transformar el nombre a su forma canónica.
lib_LTLIBRARIES = libmatX.la
libmatX_la_SOURCES = \
matX.cc
libmatX_la_LDFLAGS: Flags para el
elnlazador.
“#Headers/Makefie.am
includedir: Referencia al
directorio include donde se pondran los headers
nobase_include_HEADERS: Para que
no se instale dos veces con una invocación del programa.
Una vez configurado el proyecto
procedemos a la contrucción:
1. mkdir -p m4
2. libtoolize --copy –force
3. aclocal -I m4
4. autoheader
5. autoconf
6. automake -a
7. ./configure
.8 make
Ya podrás ver que se ha creado
lib/libmatX.la, incluso lo podrías leer(cat lib/libmatX.la) ya que
es texto plano, en este punto la biblioteca ya es usable, esto sería
en nuestro progrma usar la macro LDADD (tambien con el nombre del
ejecutable como prefijo y con _ al final) para esto puedes consultar
GNU Automake aunque este ejemplo cuneta con su *.pc.
9. sudo make install
Ya deberías poder verificar como
instalada la biblioteca en tu sistema
10. pkg-config --list-all | grep
hello_libtool
Ya teniendo esta infraestructura
básica del proyecto veamos como crear las bibliotecas estática y
dinámica correspondiente.
Biblioteca estática:
make
clean
./configure
--disable-shared
make
Biblioteca dinámica:
make
clean
./configure
--disable-static
make
NOTA:
En caso de no especificar se crea la dinámica y la estática.
Desde
aquí puedes descargar el ejemplo:
git
clone https://github.com/denisacostaq/EmbeLinux
--branch hello-libtool