Kurz programování v C/Kompilování
Co je to kompilace?
editovatKompilace neboli překlad je proces při kterém počítač převede programátorem napsaný zdrojový kód do spustitelné (binární) podoby. V binární podobě již programy nejdou, nebo jdou jen velmi těžce, upravovat. Binární podoby programů a kompilační proces se liší podle použité platformy (typu zařízení pro které programujeme), operačního systému a případně i překladače. V této knize se budeme zabývat jenom překladem pro osobní počítače. Postup se ovšem výrazně liší pro jednotlivé operační systémy, proto je tato kapitola rozdělena do čtyř částí.
Unix/Linux
editovatÚvod do překladače gcc
editovatPod operačním systémem Unix a příbuzných se staly prakticky standardem překladače skupiny GCC (GNU Compiler Collection). Tato skupina překladačů obsahuje například překladače jazyků C, C++, Fortran, Java, Ada a dalších. Nejpoužívanější jsou překladače jazyků C a C++. Pro překlad jazyka C použijeme překladač gcc (GNU C Compiler). Tento překladač je běžně dostupný v linuxových distribucích (pro Debian je to balíček gcc). Překladač se spouští z příkazové řádky a ovlivňování jeho funkce probíhá prostřednictvím parametrů.
gcc <název zdrojového souboru>
Za <název zdrojového souboru> dosadíme název souboru, který chceme zkompilovat. Pokud budu chtít zkompilovat ukázkový soubor, se jménem hello_world.c, z minulé kapitoly zadám do konzole:
gcc hello_world.c
Výstup překladače bude ve spustitelném souboru a.out. Tento soubor najdeme v aktuálním adresáři. Program můžeme obecně spustit příkazem:
./<název spustitelného souboru>
Při spouštění souboru tedy musíme udat, že je v aktuálním adresáři pomocí "./". Toto je nutné, protože operační systém všechny spustitelné soubory hledá ve složkách /bin,/usr/bin a /usr/local/bin. Proto je potřeba zadat cestu k souboru a to buď absolutně nebo jak je v příkladu relativně. "." znamená aktuální adresář. Soubor a.out v aktuálním adresáři teda spustíme následovně:
./a.out
Parametry
editovatVýstup do souboru a.out nemusí být vždy žádoucí, ale jak bylo zmíněno výše, toto chování lze změnit pomocí parametrů. Parametry se uvádějí před název zdrojového souboru.
gcc [parametry] <název zdrojového souboru>
Překladač gcc nabízí spoustu možností více či méně potřebných. V následující tabulce najdete základní přepínače. Kompletní výpis přepínačů najdete v manuálové stránce.
Parametr | Význam |
---|---|
-Wall | Nechá vypisovat všechny typy varování |
-std=<standard> | Nastaví standard jazyka C - pro tuto publikaci doporučuji použít c99 |
-o <název souboru> | Nastaví jméno výstupního souboru |
-pedantic | Vynutí výpis všech chyb vůči standardu jazyka |
Takže nyní můžeme zkusit zkompilovat kód s použitím přepínačů
gcc -Wall -pedantic -std=c99 -o hello_world hello_world.c
Tímto zkompilujeme ukázkový program s použitím standardu c99, necháme se na všechny chyby upozornit. Tyto volby doporučuji používat i z osobních zkušeností, je dobré být informován o všech chybách v kódu. Výstupní soubor nebude a.out, ale hello_world. Tento soubor se bude nacházet v pracovním adresáři. Soubor nyní spustím jako:
./hello_world
Chyby při kompilování
editovatV případě neúspěchu při kompilaci nás gcc na chybu upozorní výpisem. V následující tabulce uvedu pár z nich se kterými se můžete setkat při kompilaci ukázkového programu.
Chyba | Popis | Oprava |
---|---|---|
bash: gcc: command not found | Systém nenašel program gcc - kompilátor | Přesvědčete se zda máta překladač nainstalovaný, v Debianu balíček gcc |
gcc: no input files | Neudali jste vstupní soubory ke kompilaci | Zadejte příkaz znovu s názvy souborů které chcete zkompilovat |
gcc: hello_world.c: není souborem ani adresářem | Soubor hello_world.c nelze najít | Přesvědčete se zdali je název správně zadaný a jste ve solžce kde se tento soubor nachází |
hello_worold.c:4: warning: return type of ‘main’ is not ‘int’ | Toto je sice jen varování, ale i tak ho zde uvedu - je špatně zapsaná vstupní funkce programu, toto je způsobeno rozdílem mezi operačním systémem Microsoft Windows a Unixovými operačními systémy | Změňte návratový typ funkce z "void" na "int" tak že na 4. řádku přepíšete void na int. |
hello_worold.c:1:20: error: <nějaké jméno souboru>: není souborem ani adresářem | Hlavičkový soubor vložení pomocí "#include" nelze najít | Zkontrolujte zdali jste neudělali překlep v názvu souboru |
MAC
editovatKompilování pod Macem je naprosto stejné jako pod Linuxem. Stačí se zaregistrovat jako vývojář a stáhnout si Xcode který obsahuje balíček GCC díky kterému použijete stejné příkazy jako v předchozí kapitole.
DOS
editovatProgram v jazyce C lze samozřejmě zkompilovat i pod operačním systémem DOS. Dokonce je dostupné větší množství překladačů například Borland Turbo C, Watcom C (dnes OpenWatcom. Existuje ale i dodnes vyvíjený DJGPP. Jsou to vlastně klasické Unixové překladače z GCC pouze přeložené pro DOS. Instalace se prování stažením a rozbalením archívů s překladačem. Je potřeba minimálně djdev*.zip, gcc*b.zip, bnu*b.zip, csdpmi*b.zip a gpp*b.zip. Jsou to již zkompilované soubory překladače. Ovládání se prování stejně jako pod Unixem. Přeložené soubory navíc mají koncovku exe a výchozí název je a.exe. Pro názvy souborů platí omezení dosu!
Windows
editovatPro operační systém Microsoft Windows existuje mnoho překladačů i s celými vývojovými studiemi. Za zástupce bych zmínit Microsoft Visual Studio, CodeGear (dříve Borland) C++ Builder, případně otevřený projekt MinGW. Je možné taky využít programu Cygwin, který vytvoří Unixové prostředí v operačním systému Microsoft Windows. Ovládání jednotlivých překladačů se liší. Existuje také svobodné integrované vývojové prostředí Code::Blocks.
MinGW
editovatKompilování se provádí stejným postupem jako v Linuxu.
gcc <název zdrojového souboru>
parametry pro funkci gcc jsou také stejné. Rozdílné je třeba jen princip spuštění zkompilovaného programu, kdy stačí zadat:
a.exe
odkaz ke stažení: http://sourceforge.net/projects/mingw/
Microsoft Visual Studio
editovatCygwin
editovatInstalace probíbá stažením instalačního souboru (setup.exe) ze stránek o projektu Cygwin. Po spustění se zobrazí dialog, kdy je potřeba vybrat připojení odkud se budou součásti instalovat (na výběru celkem nezáleží jen se bude lišit rychlost stahování. Následně si jen vyberete požadované funkce
Nezapomeňte vybrat hlavně gcc.
Po potvrzení výběru začne stahování a instalace.
Jelikož tento program vytvoří v podstatě na Windows virtuální linux je princip kompilování naprosto stejný jako v rubrice linux.