gpt4 book ai didi

rust - 使用 Real-Time For the Mass 时未定义对 main 的引用

转载 作者:行者123 更新时间:2023-11-29 08:20:26 25 4
gpt4 key购买 nike

我正在尝试使用大众实时 (RTFM) 为 STM32F4Discovery 编写多线程裸机应用程序 crate .我从 example 中收集了一个最小的应用程序对于 STM32F3Discovery 板和 this example :

#![deny(unsafe_code)]
#![no_main]
#![no_std]

extern crate cortex_m;
extern crate cortex_m_rtfm as rtfm;
extern crate cortex_m_semihosting;
extern crate panic_semihosting;
extern crate stm32f4;

use stm32f4::stm32f407;

use rtfm::app;

app! {
device: stm32f407,
}

fn init(_p: init::Peripherals) {
}

fn idle() -> ! {
loop {
rtfm::wfi();
}
}

我可以让它编译但是与 rust-lld 的链接失败了

= note: rust-lld: error: undefined symbol: main

我很困惑,因为当我运行 cargo expand 时,我得到了一个主要功能:

fn main() {
#![allow(path_statements)]
let init: fn(init::Peripherals) = init;
rtfm::atomic(unsafe { &mut rtfm::Threshold::new(0) },
|_t|
unsafe {
let _late_resources =
init(init::Peripherals{core:
::stm32f407::CorePeripherals::steal(),
device:
::stm32f407::Peripherals::steal(),});
});
let idle: fn() -> ! = idle;
idle();
}

我是 Rust 的新手(事实上,我希望通过这个项目学习这门语言)并且不知道错误可能出在哪里。

最佳答案

当您要求编译器不要插入 main 时,您的程序中没有 main 符号。

Rust 使用符号重整,因此您的 main 函数没有名为 main 的符号。

答案取决于您的上下文,但通常应该这样做:

#[no_mangle] // ensure that this symbol is called `main` in the output
pub extern fn main(argc: i32, argv: *const *const u8) -> i32 {

}

可以找到所有附加信息 here

关于rust - 使用 Real-Time For the Mass 时未定义对 main 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com