Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Cross-Compilierung ist ein Prozess zum Erstellen von ausführbarem Code für eine andere Plattform als diejenige, auf der der Compiler läuft. Der Plattformunterschied kann ein anderes Betriebssystem oder eine andere Architektur sein. Beispiel: Kompilieren für Windows von Linux oder für Arm64 von x64. Unter Linux kann der Unterschied auch zwischen den standardmäßigen C-Bibliotheksimplementierungen - glibc (z. B. Ubuntu Linux) oder Musl (z. B. Alpine Linux) sein.
Native AOT verwendet Plattformtools (Linker), um Plattformbibliotheken (statisch und dynamisch) zusammen mit AOT-kompiliertem verwaltetem Code mit der endgültigen ausführbaren Datei zu verknüpfen. Die Verfügbarkeit von Cross-Linkern und statischen/dynamischen Bibliotheken für das Zielsystem beschränkt die Betriebssystem-/Architekturpaare, die cross-kompiliert werden können.
Da es keine standardisierte Möglichkeit gibt, native macOS SDK für die Verwendung unter Windows/Linux oder Windows SDK für die Verwendung unter Linux/macOS oder ein Linux SDK für die Verwendung unter Windows/macOS zu erhalten, unterstützt Native AOT keine betriebssystemübergreifende Kompilierung. Für die osübergreifende Kompilierung mit nativem AOT ist eine Art Emulation erforderlich, z. B. ein virtueller Computer oder Windows WSL.
Native AOT unterstützt jedoch nur eingeschränkt die architekturübergreifende Kompilierung. Solange die notwendige native Toolchain installiert ist, ist es möglich, unter Windows, Mac oder Linux zwischen den Architekturen x64 und arm64 zu cross-kompilieren.
Fenster
Kompilieren von x64 Windows zu ARM64 Windows oder umgekehrt funktioniert, solange die entsprechenden VS 2022 C++-Buildtools installiert sind. Um ARM64 als Ziel zu verwenden, stellen Sie sicher, dass die Visual Studio-Komponente "VS 2022 C++ ARM64/ARM64EC Buildtools (Neuestes)" installiert ist. Um x64 als Ziel zu verwenden, suchen Sie stattdessen nach "VS 2022 C++ x64/x86 Buildtools (Neuestes)".
Mac
MacOS stellt die x64- und arm64-Toolkette in der standardmäßigen XCode-Installation bereit.
Linux
Jede Linux-Verteilung verfügt über ein anderes System für die Installation systemeigener Toolketteabhängigkeiten. Lesen Sie die Dokumentation für Ihre Linux-Verteilung, um die erforderlichen Schritte zu ermitteln.
Die erforderlichen Abhängigkeiten sind:
- Ein Querverknüpfer oder ein Linker, der für das Ziel emittieren kann.
clangist ein solches Bindemittel. - Ein zielkompatibles
objcopyoderstrip, fallsStripSymbolsfür Ihr Projekt aktiviert ist. - Objektdateien für die C-Laufzeit der Zielarchitektur.
- Objektdateien für zlib für die Zielarchitektur.
Die folgenden Befehle reichen möglicherweise für die Kompilierung für linux-arm64 Ubuntu 22.04 amd64 aus, obwohl dies nicht von Ubuntu dokumentiert oder garantiert wird:
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