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

Dotaz: dll, runtime verze knihoven- jak to pojmenovat?

17.4.2011 21:42 jardík
dll, runtime verze knihoven- jak to pojmenovat?
Přečteno: 260×
Odpovědět | Admin
Zdar, dělám referát na téma knihovny v linuxu a potřebuju se zeptat jestli to pojmenovávám správně. Ve zkratce: Píši, že existují programátorské knihovny a pokud se rozhodneme využít tyto knihovny a hovoříme o dynamickém linkování, potom programátorská knihovna slouží k překladu naší aplikace a volání kódu z programátorské aplikace- ale již runtime verze.

Píši to správně? Je slovo runtime použito správně? Není místo dynamicky linkované použito na linuxu slovo sdílená knihovna? Co když, používáme statické linkování? To se potom sdílená nepoužívá, velikost programu naboptnala... ale tahle varianta se v Linuxu nepoužívá co? Tady se preferuje vše sdílet a vytvářet závislosti. Píši to ok?

Díky za pomoc začátečníkovi :)
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.4.2011 00:12 Sten
Rozbalit Rozbalit vše Re: dll, runtime verze knihoven- jak to pojmenovat?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Knihovna rozhodně neslouží k překladu aplikace, na to je překladač. Knihovny poskytují snadno použitelné řešení programátorských problémů (exportované funkce).

Dynamické knihovny se mohou linkovat (spojovat s programem) při kompilaci (compile time linking), takové knihovny potom program vyžaduje pro spuštění, nebo při běhu (run time linking), bez kterých se program obejde; těm druhým se říká moduly nebo plug-iny.

Rozdíl mezi dynamickou (tou linkovanou při kompilaci) a statickou knihovnou je v tom, kde se po kompilaci nachází — statická knihovna je při kompilaci vložena dovnitř kódu programu (chová se jako součást programu), dynamická zůstává samostatná a použije se teprve při spuštění.

Používání dynamických knihoven se preferuje, protože při opravě chyby v dynamické knihovně stačí nainstalovat novou verzi oné knihovny a všechny programy, které ji používají, jsou automaticky chráněné, zatímco u statických knihoven by se musely nahradit všechny programy. Dynamické knihovny také umožňují lepší využití paměti (v paměti je taková knihovna jenom jednou) a některé další triky (sdílení dat mezi více aplikacemi, hookování = nahrazování funkcí z jedné knihovny jinou, upravenou implementací ap.). Na druhou stranu ze stejného důvodu se někde preferuje používání statických knihoven: aplikace závislá na novější verzi knihovny nemůže ohrozit bezpečnost jiné aplikace, která byla důkladně otestována se starší verzí knihovny; pokud by se použily dynamické knihovny, ta první aplikace natáhne do systému novější verzi té knihovny, která ale nemusí být dostatečně otestovaná jako starší verze a tak může obsahovat vážné chyby. Stejně tak funkce statické knihovny nelze hookovat a tedy třeba přidat před kontrolu hesla jeho vypsání nějakému útočníkovi (což by šlo, pokud by heslo kontrolovala dynamická knihovna).
Pavel Stárek avatar 18.4.2011 16:24 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: dll, runtime verze knihoven- jak to pojmenovat?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Spíš než programátorská knihovna by se hodilo slovo "development package - vývojový balíček, někdy i SDK jehož součástí jsou různé podpůrné programy". Tedy je to soubor (ve smyslu směs, není jeden) hlavičkových souborů (v nich jsou jednak deklarace funkcí a i některých struktur, konstant atd.) a rovněž tak (většinou) bývá jeho součástí *.a soubor (archiv objektových souborů *.o), který slouží právě ke statickému linkování (skutečně je buď celý, nebo jeho jednotlivé části podle funkcí které jsou použity přilepen k výslednému spustitelnému souboru).
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
Pavel Stárek avatar 18.4.2011 16:28 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: dll, runtime verze knihoven- jak to pojmenovat?
Tedy obvykle to bývá tak, že při instalaci většiny distribucí se hlavně instalují jen "runtime" balíčky (obsahují soubory třeba libaa.0.55.so - to je v principu shared object, ve Windows známý též jako DLL), ale pokud potřebuji napsat program, který využívá funkce z knihovny libaa tak si musím nainstalovat ještě balíček libaa-devel (pojmenování se liší distribuce od distribuce). Ale jsou i distribuce (například Slackware), kde je vše součástí jednoho balíčku.
Kdo chce, hledá způsob; kdo nechce, hledá důvod.

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.