编译Rust for RTL8710时对核心库中对象的未定义引用

编译Rust for RTL8710时对核心库中对象的未定义引用,rust,arm,embedded,microcontroller,Rust,Arm,Embedded,Microcontroller,我正在使用Rust和RTL8710,并成功运行了提供的示例。当我使用alloc或freertos软件包时,问题就开始了 pub use alloc::arc::Arc; // ... let serialArc = Arc::new(serial); //... 使用Arc会导致未定义对“core::panicking::panic”的引用: application/Debug/rust_obj/librustl8710.o(rustl8710-604cf36bb12750fc.4ypvbwh

我正在使用Rust和RTL8710,并成功运行了提供的示例。当我使用alloc或freertos软件包时,问题就开始了

pub use alloc::arc::Arc;
// ...
let serialArc = Arc::new(serial);
//...
使用
Arc
会导致
未定义对“core::panicking::panic”的引用

application/Debug/rust_obj/librustl8710.o(rustl8710-604cf36bb12750fc.4ypvbwho0bu5tnww.rcgu.o):在函数“::unwrap”中:
/Users/admin/.rustup/toolschains/nightly-x86_64-apple-darwin/lib/rustlib/src/rust/src/libcore/macros.rs:20:对“core::panicking::panic”的未定义引用
application/Debug/rust_obj/librustl8710.o(rustl8710-604cf36bb12750fc.57k06xfugllsc526.rcgu.o):在函数'core::sync::atomic::fence'中:
/Users/admin/.rustup/toolschains/nightly-x86_64-apple-darwin/lib/rustlib/src/rust/src/libcore/macros.rs:20:对“core::panicking::panic”的未定义引用
/Users/admin/.rustup/toolschains/nightly-x86_64-apple-darwin/lib/rustlib/src/rust/src/libcore/macros.rs:20:对“core::panicking::panic”的未定义引用
application/Debug/rust_obj/librustl8710.o(rustl8710-604cf36bb12750fc.3ik0x0hz6l66cx38.rcgu.o):在函数'core::sync::atomic::atomic_sub'中:
/Users/admin/.rustup/toolschains/nightly-x86_64-apple-darwin/lib/rustlib/src/rust/src/libcore/macros.rs:20:对“core::panicking::panic”的未定义引用
我以某种方式解决了这个问题:

#[export_name = "_ZN4core9panicking5panic17h89270e21a9d28c4fE"]
pub fn except_add_overflow() -> ! {
    loop {}
}
当我尝试使用freertos功能时:

extern crate freertos_rs;

use super::*;
use prelude::v1::*;
use freertos_rs::*;
use freertos_rs::patterns::compute_task::*;

// use ctypes::c_void;
use serial::{Serial, SerialPort};

//
pub extern "C" fn rtos_example(serial: &mut Serial) {
    let queue = Arc::new(freertos_rs::Queue::new(10).unwrap());
    // let serialArc = Arc::new(serial);

    let read_task = {
        let queue = queue.clone();
        let mut serial = serial.clone();
        Task::new()
            .name("serial_read")
            .compute(move || {
                serial.rx_i32();
                queue.send(1, Duration::ms(1000)).unwrap();
            })
            .unwrap()
    };
}
随着核心包中缺少更多方法,情况变得更糟:

application/Debug/rust_obj/librustl8710.o(rustl8710-604cf36bb12750fc.3vxbyj3yk65hqzni.rcgu.o):在函数“main_entry”中:
/Workspace/rustl8710/src/rust/src/lib.rs:50:对'core::panicking::panic'的未定义引用
应用程序/Debug/rust_obj/librustl8710.o(rustl8710-604cf36bb12750fc.8xzrsc1ux72v29j.rcgu.o):在函数“>”中:从”
application/Debug/rust_obj/libfreertos_rs.o(freertos_rs-15ec896420c1dd77.freertos_rs6.rcgu.o):在函数“::fmt”中:
/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos_rs-0.2.0/src/base.rs:2:对“core::fmt::Formatter::debug”的未定义引用
/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos_rs-0.2.0/src/base.rs:2:对“core::fmt::Formatter::debug”的未定义引用
/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos_rs-0.2.0/src/base.rs:2:对“core::fmt::Formatter::debug”的未定义引用
/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos_rs-0.2.0/src/base.rs:2:对“core::fmt::Formatter::debug”的未定义引用
/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos_rs-0.2.0/src/base.rs:2:对“core::fmt::Formatter::debug”的未定义引用
application/Debug/rust_obj/libfreertos_rs.o(freertos_rs-15ec896420c1dd77.freertos_rs6.rcgu.o):/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos_rs-0.2.0/src/base.rs:2:下面还有更多未定义的对“core::fmt::Formatter::Debug::tuple”的引用
application/Debug/rust_obj/libfreertos_rs.o(freertos_rs-15ec896420c1dd77.freertos_rs6.rcgu.o):在函数“::fmt”中:
/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos\u rs-0.2.0/src/base.rs:2:对“core::fmt::builders::DebugTuple::finish”的未定义引用
/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos\u rs-0.2.0/src/base.rs:2:对“core::fmt::builders::DebugTuple::finish”的未定义引用
/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos\u rs-0.2.0/src/base.rs:2:对“core::fmt::builders::DebugTuple::finish”的未定义引用
/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos\u rs-0.2.0/src/base.rs:2:对“core::fmt::builders::DebugTuple::finish”的未定义引用
/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos\u rs-0.2.0/src/base.rs:2:对“core::fmt::builders::DebugTuple::finish”的未定义引用
application/Debug/rust_obj/libfreertos_rs.o(freertos_rs-15ec896420c1dd77.freertos_rs6.rcgu.o):/Users/k1x/.cargo/registry/src/github.com-1ec6299db9ec823/freertos_rs-0.2.0/src/base.rs:2:后面还有更多未定义的“core::fmt::builders::DebugTuple::finish”引用
My Cargo.toml:

[package]
name = "rustl8710"
version = "0.1.0"
authors = ["polyfractal <zach@zacharytong.com>"]

[dependencies]
freertos_rs = "0.2"

[profile.dev]
panic = "abort"

[profile.release]
panic = "abort"

[lib]
name = "rustl8710"
crate-type=["lib"]

#[dependencies.lazy_static]
#version = "0.2.1"
#features = ["nightly", "spin_no_std"]
[target.thumbv7m-none-eabi.dependencies]
alloc = {}
我猜除了主库之外,所有库都缺少核心功能。为了测试这个猜测,我在main方法中添加了一个
panic
,并得到:

application/Debug/rust_obj/librustl8710.o(rustl8710-604cf36bb12750fc.3vxbyj3yk65hqzni.rcgu.o):在函数“main_entry”中:
/Workspace/rustl8710/src/rust/src/lib.rs:50:对'core::panicking::panic'的未定义引用

有没有办法修复这些丢失的对象?

请发布您的xargo命令?还有,有没有办法获取源代码,这样就可以尝试一下?