5. Libtool 1.2

Přeskočte prosím několik odstavců, pokud Vás po předchozích kapitolách začínají nudit odstavce, ve kterých popisuji, jak je svět operačních systémů a jejich nástrojů místem naprostého zmatku a rádoby-standardů, které za první mezí mají zcela jinou podobu a jak se s pomocí GNU Libtool nastane ráj na zemi.

Svět operačních systémů a jejich nástrojů je místem naprostého zmatků....

Přestože se rozhodnete používat ve svém projektu Libtool, obávám se, že ani pro Vás ráj hned tak nenastane. Ovšem na druhou stranu si ušetříte mnoho sil, neboť nebudete řvát na lesy, kdo a proč vymyslel tak obskurní parametr pro vytvoření sdílené knihovny. On se již někdo vztekal za Vás a své poznatky shrnul do Libtool - zobecnění pro výrobu sdílených knihoven.

5.1 Libtool, autoconf a automake

Libtool lze používat jak samostatně, tak spolu s již popsanými nástroji. Ve svém referátu se však budu věnovat pouze druhému způsobu - je totiž až překvapivě jednoduchý.

5.1.1 configure.in

AM_PROG_LIBTOOL je jediný test navíc, který musíte při použití libtool do configure.in přidat. Toto makro přidá čtyři nové parametry pro configure skript - již dříve zmíněné --enable-shared, --disable-shared, --enable-static, --disable-static. Dále přidá test, který si "proklepne" na počítači nainstalované nástroje a zjistí, zda je vůbec možné sdílené knihovny vytvořit.

5.1.2 Makefile.am

Pro sdílené knihovny použijete v Makefile.am primární proměnnou LTLIBRARIES. Ve jménech knihoven však neuvedete přípony .a či .so, ale .la:

lib_LTLIBRARIES = libkvetiny.la
bin_PROGRAMS = pampeliska jitrocel

libkvetiny_la_SOURCES = stonek.c list.c kvet.c kvet.h
libkvetiny_la_LDADD = -lm

jitrocel_SOURCES = jitrocel.c
jitrocel_LDADD = libkvetiny.la

Jednoduché, že? Vše ostatní (a není toho málo - linkování, překlad s/bez parametru -fPIC,...) za Vás obstará libtool.

Všimněte si též způsobu, jakým je k jitroceli připojena květina (přirovnání začína kulhat, a já nevím proč :) - místo obvyklého -lkvetina napíšete jméno .la souboru. Proč doufám bude zřejmé z následujících odstavců.

5.2 Adresář .libs

Poté, co jsme si řekli, jak libtool použít spolu s ostatními nástroji, zkusíme se letmo podívat též pod pokličku. První věc, která Vás jistě zarazí, bude .libs adresář, který si libtool vytvoří a dále fakt, že libkvetiny.la je pouze textový soubor, jitrocel je skript a všechny binární soubory (knihovny a programy) jsou v tajemném adresáři .libs.

Použití sdílených knihoven s sebou přináší rozličné problémy - například systém o nich musí dozvědět, jinak by je nemohl načíst (knihovny musí být nainstalovány ve standardních adresářích). Program jitrocel je slinkován s knihovnou, která ještě není nainstalována - systém o ní "neví". Proto abychom program jitrocel mohli vyzkoušet ještě před samotnou instalací, místo programu jitrocel nalezneme skript, který zařídí vše potřebné a teprve pak zavolá program, který je schován v adresáři .libs.

5.3 Závěr

Kratičká kapitolka si též zaslouží krátký závěr. Abych Vám vynahradil absenci příkladu, rád bych Vás upozornil na některé vlastnosti libtool, které jsem Vám jaksi zatajil, protože šli již nad rámec mého referátu.

Je často výhodné použít sdílené knihovny pro implementaci tzv plug-ins - částí programu, které nejsou používány často a nahrají se do paměti (přes funkci dlopen) pouze při použití dané vlastnosti. Ovšem některé platformy bohužel vůbec nepodporují sdílené knihovny - a tak libtool pomůže emulovat proces nahrání plug-inu (sdílené knihovny).

O dalších hrátkách s libtool se více dozvíte v manuálu (info libtool :).


(c) 1998 0rfelyus