Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La compilazione incrociata è un processo di creazione di codice eseguibile per una piattaforma diversa da quella in cui è in esecuzione il compilatore. La differenza della piattaforma potrebbe essere un sistema operativo diverso o un'architettura diversa. Ad esempio, la compilazione per Windows da Linux o per Arm64 da x64. In Linux, la differenza può essere anche tra le implementazioni della libreria C standard, come glibc (ad esempio Ubuntu Linux) o musl (ad esempio Alpine Linux).
AOT nativo usa gli strumenti della piattaforma (linker) per collegare le librerie della piattaforma (statiche e dinamiche) insieme al codice gestito compilato con AOT nel file eseguibile finale. La disponibilità di linker incrociati e librerie statiche/dinamiche per il sistema di destinazione limita le coppie di sistema operativo/architettura che possono essere compilate in modo incrociato.
Poiché non esiste un modo standardizzato per ottenere macOS SDK nativo da usare in Windows/Linux o Windows SDK per l'uso in Linux/macOS o linux SDK per l'uso in Windows/macOS, Native AOT non supporta la compilazione tra sistemi operativi. La compilazione tra sistemi operativi con AOT nativo richiede una forma di emulazione, ad esempio una macchina virtuale o Windows WSL.
Tuttavia, Native AOT offre un supporto limitato per la compilazione trasversale rispetto alle architetture. Finché la toolchain nativa necessaria è installata, è possibile eseguire la compilazione incrociata tra le architetture x64
e arm64
su Windows, Mac o Linux.
Finestre
La compilazione incrociata da Windows x64 a ARM64 Windows o viceversa funziona purché siano installati gli strumenti di compilazione C++ vs 2022 appropriati. Per mirare a ARM64, assicurarsi che sia installato il componente "VS 2022 C++ ARM64/ARM64EC strumenti di compilazione (più recente)" di Visual Studio. Per mirare a x64, cercare invece "VS 2022 C++ x64/x86 build tools (Latest)".
Mac
MacOS fornisce le toolchain x64 e amd64 nell'installazione XCode predefinita.
Linux
Ogni distribuzione Linux ha un sistema diverso per l'installazione delle dipendenze della toolchain nativa. Consultare la documentazione relativa alla distribuzione di Linux per determinare i passaggi necessari.
Le dipendenze necessarie sono:
- Un agente reticolante, o un collegatore che può generare per l'obiettivo.
clang
è un linker di questo tipo. - Un oggetto compatibile con la destinazione
objcopy
ostrip
, seStripSymbols
è abilitato per il tuo progetto. - File di oggetto per il runtime C dell'architettura di destinazione.
- File di oggetto per zlib per l'architettura di destinazione.
I comandi seguenti possono essere sufficienti per la compilazione per linux-arm64
in Ubuntu 22.04 amd64, anche se questo non è documentato o garantito da Ubuntu:
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