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