Překlad programu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Překlad programu – C / C++ – Fórum – Programujte.comPřeklad programu – C / C++ – Fórum – Programujte.com

 

David Kolibřík
~ Anonymní uživatel
2 příspěvky
7. 6. 2012   #1
-
0
-

Ahoj, jsem začátečník a proto mám na vás dotaz.

Chci se zeptat, jak funguje překlad programu. Když například do programu vložím #include <stdio.h> vložím tím do programu deklarace funkcí, to chápu. Co ale nechápu je to, kde se vezme implementace těchto funkcí? Když například zavolám funkci printf() tak jak překladač zjistí, kde přesně implementaci funkce hledat? Vím že implementace je v knihovně. Jak ale překladač tuto funkci najde v té haldě různých knihoven? 

Poté co ji najde tak se knihovna, ve které je implementace této funkce slinkuje s mým programem?

Vždy se můj program slinkuje pouze s knihovnami, které zrovna potřebuji?

Děkuji za odpovědi.

Případně bych byl rád za nějaký článek o této problematice

Nahlásit jako SPAM
IP: 88.83.169.–
JoDiK
~ Anonymní uživatel
987 příspěvků
7. 6. 2012   #2
-
-1
-
Mimo téma

#1 David Kolibřík
Obecně:

IDE programovacího jazyka vytvářel programátor, který to vymyslel tak, aby to fungovalo. Cesty k systémovým knihovnám mají IDE uloženy v konfiguračních souborech a jejich změna je většinou v nastavení IDE (options).

Nahlásit jako SPAM
IP: 88.103.233.–
sputnikone+1
Věrný člen
8. 6. 2012   #3
-
+3
-
Zajímavé

#1 David Kolibřík
Jak si správně napsal, implementace funkcí z hlavičkových souborů jsou uloženy v knihovnách. Ty existují ve dvou podobách - staticky linkované a dynamicky linkované.

Staticky linkované se k výsledné binárce linkují v průběhu kompilace. Výhodou je v podstatě nezávislost na systémových knihovnách, nevýhodou větší velikost binárky (jsou v ní všechny fce knihovny).

Dynamicky linkované jsou trochu magie - do binárky se uloží vstupní bod do knihovny a takto se zkompiluje. Knihovna je potom sestavená tak, aby při spuštění programu nebyla závislá na umístění v paměti. Dynamický linker (na UNIX systémech většinou ldd) se poté postará o přilinkování kódu fcí za běhu programu. Výhodou je menší velikost binárky, menší paměťový footprint a možnost zajistit aktuální verzi knihovny pro všechny, kdo ji používají.

Jak se "hledají" funkce: překladač (konkrétně linker) většinou defaultně linkuje standardní knihovnu (na UNIXu libc), která mimo jiné většinou obsahuje tvoji fci printf(). Mnoho hlavičkových souborů dodávaných s překladačem používá standardní knihovnu. Jednou ze známých výjimek je např. math.h.

Pokud používám hlavičkový soubor, jehož funkce nejsou implementovány ve standardní knihovně, musím překladači explicitně sdělit, že ji chci přilinkovat. V případě math.h například linkuji libm (pro více informací doporučuji konzultovat manuál ke svému překladači/linkeru).

Překladač/linker také umožňuje nastavit adresáře s umístěním hlavičkových souborů/knihoven, více informací opět v manuálu.

Co se týče článku, docela pěkně vypadá tohle http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

#2 JoDiK
Opravdu, ale opravdu offtopic. Co má IDE společného se základními principy linkování knihoven?

Nahlásit jako SPAM
IP: 89.102.9.–
metthal
~ Anonymní uživatel
27 příspěvků
8. 6. 2012   #4
-
0
-

#3 sputnikone
Ukaz mi kde autor threadu pise nieco o IDE

Nahlásit jako SPAM
IP: 217.144.18.–
sputnikone+1
Věrný člen
8. 6. 2012   #5
-
+1
-
Zajímavé

#4 metthal
Ukaž mi, kdo tě učil číst...

Nahlásit jako SPAM
IP: 89.102.9.–
JoDiK
~ Anonymní uživatel
987 příspěvků
8. 6. 2012   #6
-
0
-

#3 sputnikone
Máš pravdu, jsem mimo, v C-čku se neorientuju a evidentně jsem nepochopil dotaz.

Slibuji, že už to nikdy neudělám...

Když jsem to odeslal, tak mi došlo, že to nebyl dobrý nápad, ale smazat to už nešlo. Ale řekl jsem si, že třeba až sem nakoukne někdo, kdo tomu rozumí, bude mít o důvod víc tazateli odpovědět tak, jak jsi to udělal ty.

Nahlásit jako SPAM
IP: 88.103.236.–
metthal
~ Anonymní uživatel
27 příspěvků
8. 6. 2012   #7
-
0
-

#5 sputnikone
Prepac, doslo k omylu, reagoval som na zly prispevok, chcel som reagovat na JoDiKov prispevok a omylom som reagoval na tvoj. Myslim vsak ze clovek so stipkou logiky by si to domyslel...

Nahlásit jako SPAM
IP: 217.144.18.–
David Kolibřík
~ Anonymní uživatel
2 příspěvky
8. 6. 2012   #8
-
0
-

#3 sputnikone
Díky, pěkně vysvětlěné

Nahlásit jako SPAM
IP: 88.83.169.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 37 hostů

Podobná vlákna

Překlad programu Eclipse — založil Jerry

Překlad — založil Franceq

Překlad A na 1 — založil Petr Zbořil

Překlad — založil tudlifuk

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý