Kompilace v OS:
GNU
Petr Koloros
Linux
Kompilace Část první Co je to kompilace
Petr Koloros
Proč kompilovat Ne vše je v balíčcích ● Někdy můžete chtít lepší optimalizaci programu ● Nebo se vyhnout některým závislostem ● Pokud programujete, nic jiného vám nezbývá ●
Kompilování je zábava ● .. zpočátku ●
Co je to kompilace Sestavení programu ze zdrojových kódů ● .. stejně jako sestavení skladeb na CDčku ● Počítač musí přeložit program do binární formy ● Většina balíčků je již v binární formě ● Většina programů je ve zdrojovém kódu ●
Takže lidi z vaší distribuce kompilují za vás ● .. a opravují chyby v programech ●
Jak to funguje... Soubor.c
Soubor.h Soubor.h zdrojáci
Přeložený soubor.o obdžekt fajl
1. Přeložení zdrojového kódu
gcc -C soubor.c soubor1.h soubor2.h -o soubor.o
Jak to funguje... Přeložený Přeložený soubor.o soubor.o
Soubor.c
Soubor.h Soubor.h
Výsledný soubor
Přeložený Knihovny soubor.o .so nebo .a s funkcemi 2. Linkování přeloženého kódu
gcc soubor.o soubor2.o -lknihovna -o soubor
Hromadná kompilace Kompilace ve větším množství než malém vyžaduje větší množství řádek, ..kdo by to psal.. ● Proto existují skripty (Makefile), které provedou celou kompilaci ● Pouští se příkazem „make“ ● Make si hlídá, co už je zkompilováno a co ne ● Při změně souboru kompiluje jen to, co je třeba ●
Kompilace na různých strojích Aplikace většinou závisejí na ostatních ● Není třeba psát, co je napsáno. Je třeba to využít ● Ne všichni mají nainstalované potřebné programy, knihovny a jejich verze. ● Většina aplikací si nejdřív zjistí, co má k dispozici ● Když něco postrádá, dá vědět ● Tento test zajišťují nástroje „autotools“ ●
Autotools ●
Programy vytvořené s podporou autotools obsahují:
configure – skript ke zjištění situace ● Makefile – configure vytvoří tento předpis pro kompilaci ● config.log – zde jsou podrobné výsledky skriptu configure ●
Jak kompilovat.. Rozbalíme aplikaci a vlezeme do ní: tar xzvf aplikace.tar.gz cd aplikace ● Zkonfigurujeme ./configure [parametry] ● Přeložíme make ● Nainstalujeme make install ●
Kompilace
.. a žili šťastně až do smrti
Petr Koloros
Kompilace Část druhá Jak co nastavit
Petr Koloros
Nastavení kompilace ●
Kompilátor gcc má různé parametry:
Optimalizace pro architekturu -march=i686 (athlon, pentium4, k6, i386, ..) ● Optimalizace obecně -O3 (-O2, -O6, -On) ● Využití registrů při aritmetice (rychlejší) -fforce-addr, -force-mem ● Nenechávání frame pointeru v registrech -fomit-frame-pointer ●
Nastavení kompilace ●
Parametry gcc při použití autotools lze specifikovat pro celou kompilaci, pro jazyk C:
CFLAGS=“-O3 -march=i286 -fforce-magic“ ./ configure
Pro C++ se to dává do CXXFLAGS ● Pro preprocesor (příprava před kompilací) použijeme CPPFLAGS ●
Nastavení linkování ●
Pro linkování platí totéž v bledě modrém:
LDFLAGS=“-s -Wl,parametry linkeru“ ./configure
-s – odstraní ladící informace z výsledného souboru -Wl – pošle následující parametr přímo linkeru parametry linkeru (v nápovědě příkazu ld) Celkem tedy: CFLAGS=“-O3 -march=i286 -fforce-magic“ CXXFLAGS=“-O3 -march=i286 -fforce-magic“ LDDFLAGS=“-s -Wl,-z,combreloc“ ./configure
Nastavení cest parametr -L znamená, kde se mají hledat knihovny ● parametr -I zase, kde se mají hledat headery ● do LDFLAGS lze vložit i pokyn k linkování knihovny (-lknihovna pro libknihovna.so) ●
●
V praxi:
CFLAGS=“-I/opt/video/include“ LDFLAGS=“-L/ opt/video/lib“ ./configure
Jak nastavit cesty obecně Knihovny ● Přidat adresáře s knihovnama do /etc/ld.so.conf ● Použít LDPRELOAD proměnou prostředí ● Použít PKG_CONFIG_PATH (nastavení pro utilitu pkg-config) ● Binárky ● Stačí aby v PATH byla cesta do adresáře aplikace se spustitelnýma souborama ● Instalace ● --prefix u configure ●
Kompilace Část třetí Nastavení autotools
Petr Koloros
Nastavení autools ●
Nápověda:
./configure --help Příklad ./configure --prefix=/opt/program --enable-ssl – with-knihovna-lib=/opt/knihovna2/lib --withknihovna-include=/opt/knihovna2/include ●
Nastavení autools ●
Parametry configure: --prefix – kam se to má nainstalovat --enable-něco – zapne podporu něčeho --with-něco-prefix – kde hledat něco --with-něco-lib – kde hledat knihovny něčeho --with-něco-include - .. pro headery ...
Kompilace Část třetí Z praxe
Petr Koloros
Co dělat, když to nefunguje ●
Google
Přečíst si co to hlásí ● Zařídit se podle toho ●
●
Přítel na telefonu
Configure – nenajde knihovny Analýza ● Zkontrolovat parametry configure ● Podívat se do config.log Řešení ● Použít vhodný parametr configure ● Přidat parametr pro hledání knihoven, headerů (CFLAGS=“-Icesta .. LDFLAGS=“-Lcesta..)
make – nenajde symboly Analýza ● Kde se symboly vyskytují (příkaz nm knihovna.so) ● Co chybí, aby byly nalezeny (-lknihovna, novější verze knihovny) Řešení ● Přidat knihovnu, pokud chybí (nejlépe parametrem v configure (LDFLAGS, --with-*)) ● Zkusit pogooglit nebo rovnou ● novější knihovnu
Chyby v programech, nekompat. Analýza ● Hlásí to chybu při překladu ● Člověk koukne a vidí, že je chyba v programu Řešení ● Zkusit trasovat zdroják, kde je co špatně ● Google ● Zkusit chybu opravit (pomůže zkušenost)
Divné chyby – pomůže zkušenost ●
Google rulez
Chyba v uživateli Snaží se kompilovat opilý ● Nepřečte si návod (README, INSTALL) ●
●
Některé programy se nekompilují pomocí ./configure && make && make install
●
Např. mozilla/firefox, gcc, perl, ..
Kompilace Část čtvrtá Automatizace a ulehčení
Petr Koloros
Automatizace, distro Gentoo ●
používá skripty, které: ● Stáhnou tarball (zabalený zdrojový kód) ● Rozbalí a aplikují patche ● Zkonfigurují a zkompilují a nainstalují dle obecných parametrů
Jednoduché ovládání (emerge aplikace) ● Řeší závislosti ● Gentoo rulez ●
Automatizace, homemade, SiLK Vychází z konvencí distra Sinux (adr. /opt) ● Parametry kompilace se zadají jen jednou ● Automaticky tvoří záznam o změnách ● Deinstalace pomocí příkazu rm -r /opt/aplikace ● Instalace pomocí cp, tar ●
Ovládání dle přání ● Závislosti si řeším sám = nejlepší volba ● Uživatel rulez, ale chce to trošku času ●
Kompilace na více strojích (distcc) Nainstalujem distcc a jedem.. ● Stačí mít kompatibilní gcc na obou stranách ● Umí tcp, ssh, udp spojení ● Významně urychluje kompilaci ●
Vyžaduje rychlou síť (přes wifi jsem nezkoušel) ● Občas to nedotáhne do konce (chyba uživatele?) ●
Kompilace Část pátá Balíčky
Petr Koloros
Jak vytvořit balíček Tarball: make dist ● Slackware ● Dát před make DESTDIR=cesta a pak to zabalit ● Debian ● Speciální adresář s popisnými soubory ● dpkg -b .... ● Gentoo ● ebuild – čistě popisný skript, zdrojáky se používají, jak jsou. ●
A problem has been detected and Windows has been shut down to prevent damage to your computer. PFN_LIST_CORRUPT If this is the first time you've seen this error screen, restart your computer. If this screen appears again, follow these steps: Check to make sure any new hardware or software is properly installed. If this is a new installation, ask your hardware or software manufacturer for any Windows updates you might need. If problems continue, disable or remove any newly installed hardware or software. Disable BIOS memory options such as caching or shadowing. If you need to use Safe Mode to remove or disable components, restart your computer, press F8 to select Advanced Startup Options, and then select Safe Mode. Technical information: *** STOP: 0x0000004e (0x00000099, 0x00000000, 0x00000000, 0x00000000) Beginning dump of physical memory Physical memory dump complete. Contact your system administrator or technical support group for further assistance.
Středisko UN*Xových Technologií Pořádné operační systémy