0

我想开始一个 Rust no_std 项目,所以我简单地创建了一个新的 cargo 包并在 main.rs 中写了以下几行:

#![feature(lang_items, start)]
#![no_std]

extern crate libc;

#[start]
fn main(_argc: isize, _argv: *const *const u8) -> isize{

    1
}

#[panic_handler]
fn panic(_: &core::panic::PanicInfo) -> !{
    loop{}
}
#[lang = "eh_personality"] extern fn eh_personality() {}

Cargo.toml 文件如下所示:

[dependencies]
libc = "0.2.71"

[profile.dev]
panic = "abort"

[profile.release]
panic = "abort"

我跑cargo build了,链接器打印了:

LINK : error LNK2001: unresolved external symbol _mainCRTStartup

该错误背后的原因可能是什么?

4

1 回答 1

0

Windows 上的默认构建目标使用 mscv 工具链,其中包括动态链接的 libc。这是一个 C 运行时,特别是包括一个未定义的main符号(假定由程序员定义),因此在链接阶段链接器找不到这个丢失的符号。您需要在main.rs#![no_main]的开头明确指定您不需要它。

我还建议您阅读A Freestanding Rust Binary,其中详细解释了更多信息。

于 2020-06-21T21:22:05.207 回答