Cross-compilación para AArch64 sin sistema operativo: no se puede encontrar el paquete `core`
Estoy tratando de compilar en cruz un ejemplo de código Rust como biblioteca para una plataforma de bare-metal AArch64 en Linux (KDE-Neon). Desafortunadamente, no funciona. Este es mi ejemplo de código Rust (lib.rs):
#![no_std]
#![no_mangle]
pub extern "C" fn double_value(a: u32) -> u32 {
a / 2
}
Según [1], primero instalé rustup con:
sudo snap install rustup --classic
Luego, seguí los pasos de [2] y ejecuté:
rustup toolchain list
rustup install stable
rustup default stable
Después, seguí [1] y [3] y ejecuté:
rustup target add aarch64-unknown-none
Sin embargo, cuando intento compilar después, no funciona, ni con rustc ni con cargo:
rustc:
rustc --crate-type=lib lib.rs --target=aarch64-unknown-none
error[E0463]: no se puede encontrar el paquete 'core'
|
= nota: es posible que el objetivo 'aarch64-unknown-none' no esté instalado
error: aborting due to previous error
cargo:
Cargo.toml:
[package]
name = "rust_baremetal_lib"
version = "0.1.0"
edition = "2018"
[lib]
name = "rust_baremetal_lib"
path = "src/lib.rs"
crate-type = ["staticlib"]
[dependencies]
cargo build --lib --target=aarch64-unknown-none
Compiling rust_baremetal_lib v0.1.0 (/home/kilian/code/rust_link/rust_baremetal_lib)
error[E0463]: no se puede encontrar el paquete 'core'
|
= nota: es posible que el objetivo 'aarch64-unknown-none' no esté instalado
error: aborting due to previous error
Para obtener más información sobre este error, prueba a ejecutar `rustc --explain E0463`.
error: no se pudo compilar 'rust_baremetal_lib'
Para obtener más información, vuelve a ejecutar el comando con la opción --verbose.
Parece que rustc y cargo no pueden encontrar la biblioteca 'core', aunque debería estar instalada, como se puede ver al ejecutar rustc --print:
```bash
rustc --print target-list | grep aarch64-unknown-none
aarch64-unknown-none
aarch64-unknown-none-softfloat
Ya busqué en Internet, pero lamentablemente no encontré ninguna pista. ¡Espero que alguien pueda ayudarme a encontrar el problema!
[1] https://rust-lang.github.io/rustup/cross-compilation.html
[2] https://stackoverflow.com/questions/44303915/no-default-toolchain-configured-after-installing-rustup
[3] https://doc.rust-lang.org/nightly/rustc/platform-support.html
davy.ai
Solución
Parece que falta la caja central para el objetivo
aarch64-unknown-none
. Puedes intentar instalarlo con el siguiente comando:rustup target add aarch64-unknown-none --toolchain nightly
Esto debería instalar la herramienta nightly junto con la caja central que falta.
Si esto aún no funciona, puedes intentar agregar lo siguiente a tu archivo Cargo.toml:
[target.aarch64-unknown-none.dependencies]
core = { version = "0.0.0", optional = true }
Esto le indica a Cargo que incluya la dependencia “core” para el objetivo
aarch64-unknown-none
, aunque es posible que no esté instalada de forma predeterminada.Finalmente, puedes intentar usar la herramienta
nightly
para compilar tu proyecto:rustup run nightly cargo build --target=aarch64-unknown-none