Kompilace v OS: GNU Linux Petr Koloros
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 Přeložený soubor.o obdžekt fajl zdrojáci 1. Přeložení zdrojového kódu gcc -C soubor.c soubor1.h soubor2.h -o soubor.o
Jak to funguje... Soubor.c Přeložený Přeložený soubor.o soubor.o Soubor.h Soubor.h Přeložený Knihovny soubor.o.so nebo.a s funkcemi Výsledný soubor 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