Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
uiii
Založen: 12. 08. 2007 Příspěvky: 251
|
Zaslal: 6. prosinec 2008, 17:28:30 Předmět: staticke knihovny a hlavickove soubory |
|
|
Cau, chtěl bych se zeptat jak je to s těma statickejma knihovnama. Nebo spíš jakej je rozdíl mezi použitím statické knihovny a hlavičkového souboru (se souborem s definicí). Když myslím rozdíl, nemyslím tím jako kdy se zabuduje do programu atd, ale spíše jaké proč se to pužívá a tak a ne jinak. Já si myslím, jestli to není náhodou tak, že ty statické knihovny se dají přilinkovat k programu v jakémkoli jazyce, na rozdíl od *.h souboru, který musí být ve stejném jazyce. Je to pravda? _________________ Twitter |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 6. prosinec 2008, 17:41:24 Předmět: |
|
|
Moje zkušenost je taková, že když mám statickou knihovnu (libko), tak to obsahuje nějaké definice. Deklarace jsou pak v hlavičkovém souboru, který je distribuován autorem statické knihovny společně s libkem. Takže není žádné buď a nebo - v normálních situacích je potřeba dostat do programu deklarace (hlavičkový soubor) i definice (libko). |
|
Návrat nahoru |
|
|
uiii
Založen: 12. 08. 2007 Příspěvky: 251
|
Zaslal: 6. prosinec 2008, 17:56:35 Předmět: |
|
|
Takze v tom pripade to slouzi jen k tomu aby si ten programator co puziva tu knihovnu nemoh precist zdrojovej kod definice. _________________ Twitter |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 6. prosinec 2008, 18:02:55 Předmět: |
|
|
Taky na to tak můžeš koukat. Nebo třeba je kompilace té knihovny tak komplikovaná, že je lepší distribuovat jen header a libko. |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 6. prosinec 2008, 18:12:17 Předmět: |
|
|
Přesně. Ve VC++ je statický LIB soubor jenom archiv obsahující všechny OBJ soubory, neboli přímo zkompilované CPP soubory (takže compiler nad kódem v LIB souboru může provádět další optimalizace). Z toho plyne, že:
1) Část nastavení tvého projektu musí odpovídat nastavení projektu té static library, jinak se ti to nemusí slinkovat. (některé nastavení té knihovny se dá potlačit a pak to jde)
2) Statické LIB soubory zkompilované jinou verzí VC++ (tím myslím i SP), než používáš, nemusí jít slinkovat s tvým projektem. (někdy to jde..) _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
uiii
Založen: 12. 08. 2007 Příspěvky: 251
|
Zaslal: 6. prosinec 2008, 18:22:51 Předmět: |
|
|
Takze ta staticka knihovna je zavisla na jazyku kvuli tomu hlavickovymu souboru narozdil od dynamicky? _________________ Twitter |
|
Návrat nahoru |
|
|
Augi
Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 6. prosinec 2008, 18:34:09 Předmět: |
|
|
Jak psal Eosie, statická knihovna se může lišit (a většinou liší) překladač od překladače + v tom ještě hraje roli nastavení překladače při vytváření statické knihovny. Ale tahle "binární nekompatibilita" nemá žádnou souvislost s hlavičkovým souborem.
Dynamická knihovna je úplně něco jinýho - to je samostatnej PE soubor a tudíž musí splňovat PE specifikaci (takže ho musí překladače podle toho vytvářet). |
|
Návrat nahoru |
|
|
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 6. prosinec 2008, 20:06:59 Předmět: |
|
|
dynamicka vs. staticka knihovna - kdyz pominu to jak to funguje uvnitr (popsali Augi a Eosie), tak u staticke knihovny jde o to ze vysledkem tveho snazeni je jedno EXE ktere ma v sobe vsechno. Naopak u dynamicke knihovny je cilem tveho snazeni male EXE tve samotne aplikace + DLL soubor kde mas napr. to sve API. Oba pristupy maji sva pro a proti a clanku na ta temata byly napsany tuny, doporucuju proto pogooglit a dozvis se dostatek informaci.
Jeste dodam ze to, ze se nejaky soubor jmenuje DLL z nej automaticky nedela dynamickou knihovnu pro tebe zrovna pouzitelnou. Zalezi co se v te DLL vali - ciste C++ aplikace (potrebujes nejaky headery abys vedel co se ma z dane knihovny volat, nebo aspon vedet co v ni teda je), neco co definuje COM rozhrani (tady jsou potreba headery + knihovna zaregistrovana v systemu (pokud nejsi masochista s hranim si s DllGetClassObject a modlenim se ze to pretypujes na spravni COM rozhrani) a tudiz jiny pristup k objektum z dane DLL nebo nedejboze .NET ze (kde je to zase uplne jinak).
jinak pokud jsme stale u problemu struktura cmd-line programu pro nasazeni GUI, mel bys proste napsat cmd-line program, ktery konecne udela to co potrebujes a az potom premyslet jak to zobecnit a udelat genialni. zacina to tu zavanet perfekcionalismem, ktery je u vyvoje software znacne nezadouci - vede k zeslozitovani ulohy a k jejimu nedokonceni - protoze ve vysledku uz toho navymyslis tolik ze to ani udelat nepujde. |
|
Návrat nahoru |
|
|
|