es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , , , ,

Answer

  1. Avatar for 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

Comments are closed.