编译Redlotus-rs项目时调用PanicInfo::message触发类型不匹配错误
解决Rust Bootkit编译时的类型不匹配错误
错误原因
你遇到的E0308类型不匹配错误,核心问题是代码错误地将PanicInfo::message()的返回值当作Option类型处理,但当前使用的Rust版本中,core::panic::PanicInfo::message()直接返回PanicMessage<'_>结构体,而非Option<PanicMessage<'_>>,导致if let Some(message) = info.message()的写法触发类型不匹配。
修复方案
方案1:直接输出panic消息
PanicMessage已经实现了Display trait,无需用if let Some判断,直接输出即可:
#[panic_handler] fn panic_handler(info: &core::panic::PanicInfo) -> ! { if let Some(location) = info.location() { log::error!( "[-] Panic in {} at ({}, {}):", location.file(), location.line(), location.column() ); // 直接输出panic消息,无需Option判断 log::error!("[-] {}", info.message()); } loop {} }
方案2:切换到项目指定的Rust版本
如果项目依赖旧版Rust(该版本中message()返回Option<&PanicMessage>),可以通过rustup切换到项目要求的版本:
# 查看项目根目录的rust-toolchain文件获取指定版本 rustup override set <项目要求的Rust版本号>
内容的提问来源于stack exchange,提问作者saw3l1y
相关产品推荐
相关产品推荐

