Procesory pohánějící většinu dnes používaných pracovních stanic nebo notebooků jsou postaveny na architektuře x86 nebo x64. Pokud chceme spustit nějaký kompilovaný program na jiné architektuře, je nutné k tomu použít příslušný toolchain.
Nejdříve uvedeme pár důležitých pojmů.
- Host – je hostitelský počítač (často x86/x64 architektury)
- Target – je cílový počítač (v tomto případě ARM)
- Toolchain – je soubor binárních programů (utilit) sloužících pro kompilaci zkompilovaných pro Hostitelský systém
- Cross-kompilace – je proces kdy se využije toolchain schopný kompilace pro Target architekturu
V novějších linuxových distribucích je řada toolchainů schopných cross-kompilace obsažena již ve standartních repozitářích. Jejich instalace je tedy snadná.
Na 64-bitových systémech je navíc potřeba nainstalovat ještě 32-bitové knihovny. Pokud by se překládalo pro 64-bitový ARM procesor, pravděpodobně by nebyly potřebné.
$ sudo apt-get install gcc-arm-linux-gnueabihf libc6-dev-i386 libc6-dev-armhf-cross
S takto nainstalovaným a automaticky nastaveným toolchainem je už možné začít kompilovat binární programy pro ARM platformu.
#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello world\n"); return(0); }
Výše napsaný Hello world je možné zkompilovat jednak pomocí standartního gcc, tak pomocí cross-kompilace. Výsledný binární soubor pak půjde spustit buď na jedné nebo druhé platformě.
$ arm-linux-gnueabihf-gcc-4.8 main.c -o arm-hello $ gcc main.c -o x64-hello
Architekturu, pro kterou je binární soubor zkompilován lze zjistit z výpisu utility file.
$ file arm-hello arm-hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=b171fc80849d4db74d4de57d8926801280606afb, not stripped
Z výpisu lze vyčíst, že se jedná o spustitelný soubor zkompilovaný pro ARM architekturu, dále je dynamicky slinkovaný a nestrippovaný.