Kereszt-kompilálás

A keresztfordítás egy olyan folyamat, amely végrehajtható kódot hoz létre egy másik platformhoz, mint amelyiken a fordító fut. A platform különbsége lehet egy másik operációs rendszer vagy egy másik architektúra. Például, Windows-ra történő fordítás Linux rendszerből, vagy Arm64-re x64-ből. Linuxon a különbség a szokásos C-kódtár-implementációk között is lehet : glibc (például Ubuntu Linux) vagy musl (például Alpine Linux).

A natív AOT platformeszközökkel (linkerekkel) összekapcsolja a platformtárakat (statikus és dinamikus) az AOT által lefordított felügyelt kódokkal a végleges végrehajtható fájlba. A keresztfordító eszközök és a statikus/dinamikus könyvtárak rendelkezésre állása a célrendszer számára korlátozza az operációs rendszer/architektúrapárok keresztfordítását.

Mivel nincs szabványosított módja a natív macOS SDK beszerzésének Windows/Linux rendszeren való használatra, vagy a natív Windows SDK Linux/macOS rendszeren való használatra, vagy a natív Linux SDK Windows/macOS rendszeren való használatra, a natív AOT nem támogatja az operációs rendszerek közötti fordítást. Az operációs rendszerek közötti fordítás natív AOT használatával valamilyen emulációs formát igényel, például virtuális gépet vagy Windows WSL-t.

A natív AOT azonban korlátozottan támogatja az architektúrák közötti fordítást. Amíg telepítve van a szükséges natív eszközlánc, lehetséges keresztfordítást végezni a Windows, Mac vagy Linux operációs rendszeren a x64 és a arm64 architektúrák között.

Windows

Az x64 Windowsról ARM64 Windowsra vagy fordítva történő keresztfordítás működik, amennyiben a megfelelő VS 2022 C++ build eszközök telepítve vannak. Az ARM64 platformra való célozáshoz győződjön meg arról, hogy telepítve van a Visual Studio "VS 2022 C++ ARM64/ARM64EC build eszközök (Legújabb)" komponens. Az x64 célzásához keresse a "VS 2022 C++ x64/x86 buildeszközök (Legújabb)" lehetőséget.

Mac

A MacOS az x64- és arm64-eszközláncokat az alapértelmezett XCode-telepítésben biztosítja.

Linux

Minden Linux-disztribúció más rendszerrel rendelkezik a natív eszközláncfüggőségek telepítéséhez. A szükséges lépések meghatározásához tekintse meg a Linux-disztribúció dokumentációját.

A szükséges függőségek a következők:

  • Keresztkötő, vagy egy linker, amely kibocsátást végezhet a cél érdekében. clang az egyik ilyen linker.
  • Célkompatibilis objcopy vagy strip, ha StripSymbols engedélyezve van a projekthez.
  • Objektumfájlok a célarchitektúra C-futtatókörnyezetéhez.
  • Objektumfájlok a célarchitektúra zlib-éhez.

Az alábbi parancsok elegendőek az Ubuntu 22.04 amd64-en való fordításhoz linux-arm64 , bár ezt az Ubuntu nem dokumentálja vagy garantálja:

sudo dpkg --add-architecture arm64
sudo bash -c 'cat > /etc/apt/sources.list.d/arm64.list <<EOF
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
EOF'
sudo sed -i -e 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list
sudo sed -i -e 's/deb mirror/deb [arch=amd64] mirror/g' /etc/apt/sources.list
sudo apt update
sudo apt install -y clang llvm binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu zlib1g-dev:arm64