You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust系统Bootloader链接错误求助:未定义符号__rustc::rust_begin_unwind

问题

严格按照教程完成第二章内容后,构建bootloader时出现链接错误,具体报错如下:

Building bootloader
   Compiling bootloader v0.9.30 (/home/radue/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/bootloader-0.9.30)
error: linking with `rust-lld` failed: exit status: 1
  |
  = note:  "rust-lld" "-flavor" "gnu" "--script=linker.ld" "--gc-sections" "/tmp/rustco4qhbD/symbols.o" "<4 object files omitted>" "--as-needed" "-Bstatic" "/home/radue/RustroverProjects/untitled/target/bootimage/bootloader/x86_64-bootloader/release/deps/{libxmas_elf-5d65d2bf96cae931.rlib,libzero-7687372b2590b98d.rlib,libx86_64-51db3ea7fbab3b39.rlib,libvolatile-a65ebc85f9994f32.rlib,libbitflags-d0b0465c0016cac0.rlib,libbit_field-d84f3e3f48fe7d8b.rlib,libusize_conversions-83f8cb4f56f96380.rlib,libfixedvec-c637a26df226bd98.rlib,libbootloader-22099723311d027c.rlib,librlibc-9db6015d2d748be6.rlib,librustc_std_workspace_core-0f32d5b194ffc9d8.rlib,libcore-df0460c8357f8b8d.rlib,libcompiler_builtins-0049d8cc3182492c.rlib}.rlib" "-L" "/tmp/rustco4qhbD/raw-dylibs" "-Bdynamic" "--eh-frame-hdr" "-z" "noexecstack" "-L" "/home/radue/RustroverProjects/untitled/target/bootimage/bootloader/x86_64-bootloader/release/build/bootloader-45705ba959b703b7/out" "-o" "/home/radue/RustroverProjects/untitled/target/bootimage/bootloader/x86_64-bootloader/release/deps/bootloader-25df0860a36a3c81" "--gc-sections" "-O1"
  = note: some arguments are omitted. use `--verbose` to show all linker arguments
  = note: rust-lld: error: undefined symbol: __rustc::rust_begin_unwind
          >>> referenced by panicking.rs:75 (src/panicking.rs:75)
          >>>               core-df0460c8357f8b8d.core.806e4ebd01a4702-cgu.12.rcgu.o:(core::panicking::panic_fmt::hbefbee8686df1135) in archive /home/radue/RustroverProjects/untitled/target/bootimage/bootloader/x86_64-bootloader/release/deps/libcore-df0460c8357f8b8d.rlib
          

error: could not compile `bootloader` (bin "bootloader") due to 1 previous error
Error: Bootloader build failed.
Stderr: 

原因分析

这个错误是因为在no_std裸机环境下,Rust标准库的panic unwind机制没有被实现。__rustc::rust_begin_unwind是panic触发时的unwind入口函数,而bootloader这类底层程序默认不会包含该函数的实现。

解决方法

1. 禁用panic unwind

在项目根目录的Cargo.toml中添加以下配置,强制panic时直接终止程序,而非尝试执行unwind:

[profile.dev]
panic = "abort"

[profile.release]
panic = "abort"

2. 检查版本兼容性

你使用的bootloader版本是v0.9.30,该版本可能与当前Rust nightly版本不兼容:

  • 可以通过rustup override set nightly-YYYY-MM-DD降级Rust到bootloader v0.9.30兼容的版本(具体版本可参考bootloader官方文档)
  • 或者升级bootloader到最新兼容版本,修改Cargo.toml中的依赖版本后重新构建

3. 确认目标环境配置正确

确保已正确设置裸机目标及链接器,在.cargo/config.toml中添加或检查以下配置:

[build]
target = "x86_64-unknown-none"

[target.x86_64-unknown-none]
linker = "rust-lld"

内容的提问来源于stack exchange,提问作者radueduard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:34:52