rust疑难杂症(lesson)

博客记录了在使用Rust编程过程中遇到的问题,如Cargo构建时的文件锁问题,解决方法是删除`.cargo/.package-cache`。另外,介绍了如何在代码中忽略警告,以及当新编译器与老项目不兼容时,如何使用特定版本的Rust编译器(如1.50.0)来解决不兼容问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rust疑难杂症解决

边碰到边记录,后续可能会逐步增加,备查

  • cargo build时碰到 Blocking waiting for file lock on package cache
    原因是Cargo 无法获取对包缓存的文件锁,
    有时vscode中项目比较多,如果其中某些库应用有问题,rust-analylzer转圈圈的时候容易碰到这个情况。
    在这里插入图片描述

如果确定没有其他程序占用,执行以下命令(或者暂停rust-analyzer,或者把有问题的项目移出vscode)
rm -rf ~/.cargo/.package-cache
执行之后就可以cargo build了。

  • 编译时有时会有很多警告,影响观察输出结果
    如果要忽略这些警告,可以在main.rs最上部增加以下代码,
    #![allow(dead_code)] // 忽略因未使用的代码而产生 “dead code” 警告
    #![allow(unused_variables)] // 忽略未使用的变量而产生 “unused variable” 警告
    #![allow(unused_assignments)] // 忽略未使用的赋值操作而产生 “unused assignment” 警告
    #![allow(unused_attributes)] // 忽略未使用的属性指令而产生 “unused attribute” 警告
    或者
    RUSTFLAGS=“-Awarnings” cargo build

  • 有时编译很老的项目时,默认的新的编译器和老的rust库产生不兼容问题
    比如有一次编译一个老项目,项目引用的第三方库引用了老版的socketaddr.rs,
    使用cargo build时报错了:
    cannot transmute between types of different sizes, or dependently-sized types
    mem::transmute::<SocketAddrV4, sockaddr_in>(v4);(SocketAddrV4和sockaddr_in定义不同)
    解决方法(使用特定的老版本rust编译项目):
    rustup toolchain install 1.50.0
    cargo +1.50.0 build 或者 rustup run 1.50.0 cargo build

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

^_^ 纵歌

工作中的经验分享

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值