【问题标题】:Rust package using unstable library feature 'iter_nth_back'使用不稳定库功能“iter_nth_back”的 Rust 包
【发布时间】:2019-10-01 06:07:18
【问题描述】:

我有一个我不太了解的 Rust 应用程序,我正在从我正在处理的 Python 程序中调用它。我没有更改 Rust 源代码中的任何内容,但是这两个项目的构建过程刚刚停止工作,出现如下错误:

[... several similar errors]
error[E0658]: use of unstable library feature 'iter_nth_back'
   --> /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ndarray-0.13.0/src/iterators/mod.rs:585:46
    |
585 |         either_mut!(self.inner, iter => iter.nth_back(n))
    |                                              ^^^^^^^^
    |
    = note: for more information, see https://github.com/rust-lang/rust/issues/56995

error: aborting due to 5 previous errors

For more information about this error, try `rustc --explain E0658`.
error: Could not compile `ndarray`.

我看了ndarray releases的列表,前几天发布了0.13.0版本,所以我怀疑它与我的构建环境不兼容。

我怎样才能让我的构建再次工作?

以下是重现问题的完整步骤:

$ sudo docker run -it --rm rust:1.36.0
# USER=foo cargo new hello_world --bin
     Created binary (application) `hello_world` package
# cd hello_world/
# echo 'bio = "^0"' >> Cargo.toml
# cargo build
    Updating crates.io index
  Downloaded bio v0.29.0
  Downloaded [... many more ...]
  Downloaded ndarray v0.13.0
  Downloaded [... many more ...]
   Compiling proc-macro2 v1.0.4
   Compiling [... many more ...]
   Compiling ndarray v0.13.0
   Compiling [... many more ...]
   Compiling statrs v0.11.0
error[E0658]: use of unstable library feature 'iter_nth_back'
   --> /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ndarray-0.13.0/src/iterators/mod.rs:134:5
    |
134 | /     fn nth_back(&mut self, n: usize) -> Option<*mut A> {
135 | |         let index = self.index?;
136 | |         let len = self.dim[0] - index[0];
137 | |         if n < len {
...   |
147 | |         }
148 | |     }
    | |_____^
    |
    = note: for more information, see https://github.com/rust-lang/rust/issues/56995
[... other, similar errors ...]
   Compiling serde_derive v1.0.101
   Compiling strum_macros v0.16.0
   Compiling snafu-derive v0.5.0
error: aborting due to 5 previous errors

For more information about this error, try `rustc --explain E0658`.
error: Could not compile `ndarray`.
warning: build failed, waiting for other jobs to finish...
error: build failed
#

有趣的是,如果我为 rust 运行最新的 docker 映像 1.38,我看不到错误。但是,我的构建过程是从 Ubuntu Xenial 的包管理器安装 Rust,所以我可能无法轻松升级它。

【问题讨论】:

    标签: rust rust-cargo


    【解决方案1】:

    新答案:升级 Rust

    原来升级 rust 并没有我想的那么难,然后我就不用改 Rust 源代码了。

    在我的.travis.yml 文件中,我替换了这个:

    - sudo apt-get install -y cargo
    

    用这个:

    - sudo curl https://sh.rustup.rs -sSf | sh -s -- -y
    - source ~/.cargo/env
    

    原答案:引脚依赖关系

    我尝试添加一个显式的 ndarray 依赖项并将其固定在 0.12,但这不起作用。然后我注意到bio 在最近几天也有一个新版本。固定该依赖项有效。

    $ sudo docker run -it --rm rust:1.36.0
    # USER=foo cargo new hello_world --bin
         Created binary (application) `hello_world` package
    # cd hello_world/
    # echo 'bio = "~0.28.2"' >> Cargo.toml
    # cargo build
        Updating crates.io index
      Downloaded bio v0.28.2
      Downloaded [... many more ...]
      Downloaded ndarray v0.12.1
      Downloaded [... many more ...]
       Compiling proc-macro2 v1.0.4
       Compiling [... many more ...]
       Compiling ndarray v0.12.1
       Compiling [... many more ...]
       Compiling csv v1.1.1
       Compiling hello_world v0.1.0 (/hello_world)
        Finished dev [unoptimized + debuginfo] target(s) in 14m 15s
    #
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      相关资源
      最近更新 更多