Portál AbcLinuxu, 12. května 2025 04:11

Dotaz: Autoconf: cesta ke knihovnám

21.7.2006 19:04 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Autoconf: cesta ke knihovnám
Přečteno: 173×
Odpovědět | Admin
Dobrý den,

chtěl bych si ujasnit, jakým způsobem programy kompilované pomocí Autotools/Automake nakládají s knihovnami.

Mám zdrojový kód programu (určený k distribuci - tedy se skriptem configure) a progam vyžaduje nějakou knihovnu v té a té verzi. Tu v systému nemám a zkompiluji ji do adresáře /opt/libs/knihovna (vytvoří se obvykle podadresáře include a lib).

Nyní bych rád sdělil tomuto šílenému sestavovacímu systému, kde má knihovnu hledat. Zkusil jsem toto:

./configure --prefix=/opt/program --libdir=/opt/libs/knihovna/lib --includedir=/opt/libs/knihovna/include/

Bohužel to mi nepomůže. Při vlastním sestavení totiž nejsou kompilátoru přidány správné atributy (-I).

Dělám něco špatně, nebo má autor špatně vytvořené sestavovací skripty? Jaký je správný (obecný) způsob?

ps - a což teprve když v systému knihovna je, ale ve staré verzi (a v /opt nebo /usr/local mám novější). mně se to jeví jako neřešitelný problém (pomocí configure)
Later --- Lukáš Zapletal
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.7.2006 19:43 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Autoconf: cesta ke knihovnám
Odpovědět | | Sbalit | Link | Blokovat | Admin
1. Instalovat knihovnu určenou pro použití v systému do /opt/libs/jméno je nesmysl. Jakž takž by to mohlo fungovat, pokud byste používal jen staticky linkovanou knihovnu, při překladu přidal odpovídající '-I' a při linkování '-L'. Jakmile půjde o dynamickou knihovnu, loader ji nenajde, ledaže byste mu cestu k ní připsal do /etc/ld.co.conf

2. Přepínače --libdir a --includedir říkají configure skriptu, kam bude příslušný program instalovat své knihovny resp. hlavičkové soubory (bude-li nějaké instalovat). Ne kde bude hledat knihovny při svém překladu resp. linkování.

3. Pokud program potřebuje nějakou knihovnu a ta není instalována v obvyklých adresářích, budou potřeba příslušné přepínače '-I' nebo '-L'. Záleží na tom, jak je to v configure.in vyřešeno. Nejjednodušší je použití pkg-config prostřednictvím makra PKG_CHECK_MODULES(), ale to vyžaduje, aby byl nainstalovaný pkg-config. Některé skripty to řeší tak, že zavedou nějaký --with-jméno parametr, kterým je potřeba jim sdělit, kde mají knihovnu hledat.

22.7.2006 10:47 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: Autoconf: cesta ke knihovnám
No dobrá, jenže já knihovnu nechci instalovat do /usr/local, protože se jedná o dejme tomu vývojovou verzi knihovny, kterou mám již v systému. Pokud programu sdělím, kde má dynamickou knihovnu hledat, tak to zas až takový nesmysl není, že ano.

Ty přepínače -I a -L se předávají přímo configure skriptu? Zkusím tedy projít manuálovou stránku programu pkg-config. Díky.
22.7.2006 11:22 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Autoconf: cesta ke knihovnám
Dynamická knihovna je dynamická právě tím, že se linkuje až za běhu programu (obvykle při jeho spuštění). Takže byste to systému musel sdělit nejen při linkování, ale především při spouštění toho programu.
22.7.2006 18:15 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Autoconf: cesta ke knihovnám
Hlavně jsem ale z dotazu nepochopil, jestli jde o váš projekt, ke kterému si píšete configure.in, nebo se snažíte přeložit něco cizího.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.