Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La compilación cruzada es un proceso de creación de código ejecutable para una plataforma distinta de la que ejecuta el compilador. La diferencia de plataforma puede ser un sistema operativo diferente o una arquitectura diferente. Por ejemplo, la compilación para Windows desde Linux o para Arm64 desde x64. En Linux, la diferencia también puede estar entre las implementaciones estándar de la biblioteca de C: glibc (por ejemplo, Ubuntu Linux) o musl (por ejemplo, Alpine Linux).
AOT nativo usa herramientas de plataforma (enlazadores) para vincular bibliotecas de plataforma (estáticas y dinámicas) junto con código administrado compilado por AOT en el archivo ejecutable final. La disponibilidad de los enlazadores cruzados y las bibliotecas estáticas o dinámicas para el sistema de destino limita los pares de sistema operativo o arquitectura que pueden compilarse entre sí.
Dado que no hay ninguna manera estandarizada de obtener el SDK nativo de macOS para su uso en Windows/Linux o Windows SDK para su uso en Linux/macOS, o un SDK de Linux para su uso en Windows/macOS, AOT nativo no admite la compilación entre sistemas operativos. La compilación entre sistemas operativos con AOT nativo requiere alguna forma de emulación, como una máquina virtual o WSL de Windows.
Sin embargo, AOT nativo tiene compatibilidad limitada con la compilación entre arquitecturas . Siempre que se instale la cadena de herramientas nativa necesaria, es posible cross-compilar entre las arquitecturas x64
y arm64
en Windows, Mac o Linux.
Windows
La compilación cruzada desde x64 Windows a ARM64 Windows o viceversa funciona siempre que se instalen las herramientas de compilación de C++ de VS 2022 adecuadas. Para tener como destino ARM64, asegúrese de que está instalado el componente de Visual Studio "VS 2022 C++ ARM64/ARM64EC build tools (Latest)". Para tener como destino x64, busque "Visual Studio 2022 C++ x64/x86 herramientas de compilación (Última versión)" en su lugar.
Mac
MacOS proporciona las cadenas de herramientas x64 y amd64 en la instalación predeterminada de XCode.
Linux
Cada distribución de Linux tiene un sistema diferente para instalar dependencias nativas de cadenas de herramientas. Consulte la documentación de la distribución de Linux para determinar los pasos necesarios.
Las dependencias necesarias son:
- Un enlazador cruzado, o un enlazador que puede enviar hacia el destino.
clang
es un enlazador de este tipo. - Compatible con el destino
objcopy
ostrip
, siStripSymbols
está habilitado para tu proyecto. - Archivos de objeto para el tiempo de ejecución de C de la arquitectura de destino.
- Archivos de objeto para zlib para la arquitectura de destino.
Los siguientes comandos pueden ser suficientes para compilar para linux-arm64
en Ubuntu 22.04 amd64, aunque esto no está documentado o garantizado por 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