我在我的Ubuntu 22.04实例上克隆了这个repo: https://gitlab.conclusive.pl/devices/ubuntu-build
and I'm try run:
git submodule update --init --recursive
sudo make image PROFILE=kstr-sama5d27
我收到以下错误:
error[E0658]:使用不稳定的库特性'scoped_threads'——>/root/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo-deb-1.41.3/src/data.rs: 128:5| 128 | std::thread::scope(移动|s| {)| ^^^^^^^^^^^^^^^^^^|=注意:请参阅问题#93203 https://github.com/rust-lang/rust/issues/93203获取更多信息
error[E0658]:使用不稳定的库特性'scoped_threads'——>/root/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo-deb-1.41.3/src/data.rs: 130:29| 130 | let hash_thread = s.spawn(移动|| {| ^^^^^|=注意:请参阅问题#93203 https://github.com/rust-lang/rust/issues/93203获取更多信息
error[E0658]:使用不稳定的库特性'scoped_threads'——>/root/.cargo/registry/src/github.com-1ecc6299db9ec823/cargo-deb-1.41.3/src/data.rs: 162:24| 162 | Ok(hash_thread.join().unwrap())| ^^^^|=注意:请参阅问题#93203 https://github.com/rust-lang/rust/issues/93203获取更多信息
有关此错误的更多信息,请尝试
rustc --explain E0658
。由于之前的3个错误警告,无法编译cargo-deb
。构建失败,等待其他作业完成…错误:failed to编译gpt-manipulator v0.1.0 (/home/davidg/kstr-ubuntu-build/build-kstr-sama5d27/gpt-manipulator)
;中间工件可以在/home/davidg/kstr-ubuntu-build/build-kstr-sama5d27/gpt-manipulator/target
make: *** [Makefile:106: gpt-manipulator] Error 101
自从上次工作以来,源代码没有变化,所以我怀疑是外部的东西发生了变化。我在repo中执行了grep -r "thread::scope" .
,没有发现这个不稳定特性的使用。
有构建错误的gpt-manipulator子模块repo是https://gitlab.conclusive.pl/devices/gpt-manipulator,我可以从这个repocargo build
没有问题。
注意,我的环境是使用sudo apt-get install bc libssl-dev cargo gdisk mtools
准备的。这将在系统范围内安装rust&cargo,并允许sudo访问它(sudo make image
需要)。我读到使用rustup
安装方法,我可以切换到夜间并允许不稳定功能,但安装这种方式sudo无法找到二进制文件。
cargo --version
和rustc --version
都报告1.61.0
我怎样才能成功地构建这个?
作用域线程在1.63中已经稳定,所以一些依赖项现在可能正在使用它。如果你运行的是一个早期的编译器,它会报错这种用法。一个rustup update
或者你用来更新Rust的等价代码应该可以解决这个问题。
失败的命令实际上是cargo install cargo-deb
。最新版本似乎使用了有作用域的线程。
作为一种解决方法,您可以安装一个特定的旧版本:
cargo install cargo-deb --version 1.28.2
可能想使用1.28.2
来匹配你说的Cargo.toml
中的版本,否则看起来1.40.5
是最后一个不使用std::thread::scope
的版本。
根据@cafce25的回答,有作用域的线程在1.63.0中是稳定的,但是目前apt仅限于提供1.61.0。
使用sudo命令获取可运行的版本>= 1.63.0:
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sudo sh
- 在/etc/sudoers中添加
:/root/.cargo/bin