szó jelentését keresi. A DICTIOUS-ban nem csak a
szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a
szót egyes és többes számban mondani. Minden, amit a
szóról tudni kell, itt található. A
szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. A
és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.
Főnév
cross compiler (tsz. cross compilers)
- (informatika) A cross compiler vagy keresztfordító egy olyan fordítóprogram, amely képes olyan céleszközre (target platform) fordítani kódot, amely nem azonos azzal a platformmal, amelyen maga a fordító fut.
Egyszerűen fogalmazva:
- egy hagyományos fordító (compiler) a saját platformjára fordít (pl. Linuxon Linux bináris, Windows-on Windows bináris).
- egy keresztfordító más platformra fordít (pl. Linuxon olyan binárist fordítok, ami majd egy ARM-alapú beágyazott eszközön fut).
Alapfogalmak
- Host (gazdagép/platform): az a platform, amin a fordító fut (pl. Linux x86_64).
- Target (céleszköz/platform): az a platform, amin a fordított program fog futni (pl. ARM Cortex-M3, vagy Windows x86, vagy macOS).
- Build platform: az a platform, amin a cross-compiler lefordításra kerül (ez néha eltér a hosttól, de gyakran azonos).
Ezeket a fogalmakat egy táblázatban is szokták szembeállítani:
Fogalom
|
Jelentése
|
Példa
|
Build
|
Ahol a fordítót lefordítják
|
Linux x86_64
|
Host
|
Ahol a fordító fut
|
Linux x86_64
|
Target
|
Ahol a végleges bináris fut
|
ARM Cortex-M3
|
Ha a Host == Target
→ natív fordítás Ha a Host != Target
→ cross-compiling
Mikor van szükség cross-compilerre?
A leggyakoribb helyzetek:
- Beágyazott rendszerek fejlesztése Pl. mikrokontrollerek, IoT eszközök (pl. ESP32, STM32, Arduino). Ezeken az eszközökön nem praktikus a helyszíni fordítás (kevés RAM, CPU lassú, nincs megfelelő OS).
- Operációs rendszerek portolása Pl. Linux kernel, BSD rendszer, U-Boot bootloader fordítása új architektúrákra.
- Cross-platform alkalmazásfejlesztés Pl. Linuxon olyan binárist készíteni, ami Windows vagy macOS alatt fog futni → pl.
mingw-w64
cross-compilerrel.
- Distribúciók építése Nagy Linux disztribúciók (Debian, Arch) sok esetben cross-compilinggal állítanak elő csomagokat nem mainstream architektúrákra (pl. ARM64, RISC-V).
- Optimalizáció Nagy gépen gyorsan lefordítom a kódot, célplatformon csak futtatom.
Előnyei
✅ A host gép erős → gyorsabb fordítás ✅ A target gép lehet kis teljesítményű (pl. mikrokontroller) ✅ Nem kell toolchain-t/fordítót telepíteni a célplatformra ✅ Automatizálható build pipeline-okban (CI/CD)
Hátrányai
❌ Toolchain összeállítása néha nem triviális ❌ Cross-dependency kezelése bonyolultabb ❌ A cross-compiled binárist tesztelni is kell target platformon (pl. emulátor vagy igazi eszköz) ❌ Debugolás nehezebb lehet
GCC alapú cross-compiler
GCC-t (GNU Compiler Collection) lehet cross-compiler módba is fordítani.
Példák:
- arm-none-eabi-gcc → ARM Cortex-M mikrokontrollerre
- aarch64-linux-gnu-gcc → ARMv8 (64 bit) Linux rendszerre
- x86_64-w64-mingw32-gcc → Windows 64 bitre Linuxról fordítva
# Példa parancs cross-compilingra:
arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -o program.elf program.c
Clang/LLVM is képes cross-compilingra
clang --target=armv7-none-eabi -mcpu=cortex-m4 -o program.elf program.c
Egy teljes toolchain tartalmazza:
- Compiler → pl.
gcc
, clang
- Assembler → pl.
as
- Linker → pl.
ld
- Binutils → pl.
objcopy
, objdump
- Standard library → pl.
newlib
, glibc
, musl
cross-built változatban
A cross-compiler nem csak a gcc
binárist jelenti, hanem a teljes láncot.
Toolchain neve
|
Target
|
Tipikus használat
|
arm-none-eabi-gcc
|
Bare-metal ARM
|
Mikrokontrollerek
|
aarch64-linux-gnu-gcc
|
ARM64 Linux
|
SBC-k (pl. Raspberry Pi)
|
x86_64-w64-mingw32-gcc
|
Windows x86_64
|
Cross-platform appok
|
riscv64-unknown-elf-gcc
|
Bare-metal RISC-V
|
Új architektúrák
|
Build rendszerek cross-compiler támogatással
CMake
cmake -DCMAKE_TOOLCHAIN_FILE=arm-toolchain.cmake ..
make
Egy toolchain.cmake
fájlban lehet megadni a cross-compiler konfigurációt.
Meson
meson --cross-file cross-arm.txt builddir
ninja -C builddir
./configure --host=arm-none-eabi --build=x86_64-linux-gnu
make
Cross-compiling lépések
- Toolchain beszerzése Pl.
gcc-arm-none-eabi
, mingw-w64
, saját GCC build.
- Sysroot előkészítése → Olyan környezet, ami a target platformnak felel meg (header fájlok, libek).
- Build rendszer konfigurálása → CMake, autotools, Meson, makefile.
- Fordítás → A host gépen történik.
- Céleszközre juttatás → Pl.
scp
, rsync
, vagy közvetlen kiégetés flash memóriába.
- Tesztelés a target platformon → Igazi hardveren vagy emulátorban (pl. QEMU).
Nehézségek cross-compiling során
- Endianness különbségek pl. x86 → little endian, PowerPC → big endian lehet.
- Szabványkönyvtár különbségek Pl. glibc vs musl vs newlib → API különbségek.
- Syscall különbségek Kernel verzió, architektúra API-k.
- ABI inkompatibilitás Application Binary Interface változások.
- Debugolás A gdb-nek is cross-debug build kellhet (pl.
arm-none-eabi-gdb
).
Emulátorok segítik a cross-compilingot
- QEMU Nagyon elterjedt → ARM, RISC-V, MIPS, PowerPC stb. emulálható.
qemu-arm -L /path/to/sysroot ./my_program
Összefoglalás
Natív fordítás
|
Cross-compiling
|
Host == Target
|
Host ≠ Target
|
Közvetlenül fut a hoston
|
Céleszközön fog futni
|
Könnyebb tesztelni
|
Tesztelés targeten/emulátorban kell
|
Végezetül
A cross-compiling egy elengedhetetlen eszköz:
✅ beágyazott fejlesztéshez ✅ cross-platform szoftverekhez ✅ disztribúciók építéséhez ✅ optimalizált build pipeline-okhoz
Bár a cross-compiling bonyolultabb lehet, az ipari gyakorlatban nélkülözhetetlen — minden nagy Linux disztribúció, beágyazott firmware, vagy akár Android is széles körben alkalmazza.