如何解决锈病“货物测试”在板条箱中具有重复lang项目的arduino目标失败
我正在尝试构建和测试针对Arduino Uno的rust应用程序。
此练习记录在这里:
我将使用mseg-lib
板条箱作为此错误的示例,但这三个板条箱都发生了此事...
CODE
mseg-lib $ tree -a
.
├── .cargo
│ └── config.toml
├── Cargo.lock
├── Cargo.toml
└── src
└── lib.rs
文件(mseg-lib):
$ cat .cargo/config.toml
[build]
target = "../avr-atmega328p.json"
[profile.dev]
panic = "abort"
[profile.release]
panic = "abort"
[unstable]
build-std = ["core"]
$ cat Cargo.toml
[package]
name = "mseg-lib"
version = "0.1.0"
authors = ["ToddG <pub+github@zwrob.com>"]
edition = "2018"
[dependencies]
panic-halt = "0.2.0"
arduino-uno = { git = "https://github.com/Rahix/avr-hal" }
$ cat src/lib.rs
#![no_std]
extern crate panic_halt;
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2,4);
}
}
pub mod foo{
pub fn return_bar() -> &'static str{
"bar"
}
}
REPRO
clean
和build
目标按预期工作:
$ cargo clean
mseg-lib $ cargo build
Compiling compiler_builtins v0.1.35
Compiling core v0.0.0 (/home/todd/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core)
Compiling proc-macro2 v1.0.21
Compiling unicode-xid v0.2.1
Compiling syn v1.0.41
Compiling semver-parser v0.7.0
Compiling proc-macro-hack v0.5.18
Compiling paste v1.0.1
Compiling semver v0.9.0
Compiling rustc_version v0.2.3
Compiling bare-metal v0.2.5
Compiling quote v1.0.7
Compiling avr-device-macros v0.2.2
Compiling ufmt-macros v0.1.1
Compiling rustc-std-workspace-core v1.99.0 (/home/todd/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/rustc-std-workspace-core)
Compiling nb v1.0.0
Compiling void v1.0.2
Compiling cfg-if v0.1.10
Compiling vcell v0.1.2
Compiling ufmt-write v0.1.0
Compiling panic-halt v0.2.0
Compiling ufmt v0.1.0
Compiling avr-device v0.2.2
Compiling nb v0.1.3
Compiling embedded-hal v0.2.4
Compiling avr-hal-generic v0.1.0 (https://github.com/Rahix/avr-hal#ad6fedd3)
Compiling atmega328p-hal v0.1.0 (https://github.com/Rahix/avr-hal#ad6fedd3)
Compiling arduino-uno v0.1.0 (https://github.com/Rahix/avr-hal#ad6fedd3)
Compiling mseg-lib v0.1.0 (/home/todd/repos/personal/learn-electronics/posts/hello-world/07-multisegment-led-rust-arduino/code/multisegment-led/mseg-lib)
Finished dev [unoptimized + debuginfo] target(s) in 32.57s
但是,test
目标失败:
$ cargo test
错误
Compiling nb v1.0.0
Compiling cfg-if v0.1.10
Compiling ufmt-write v0.1.0
Compiling vcell v0.1.2
Compiling void v1.0.2
Compiling panic-halt v0.2.0
Compiling bare-metal v0.2.5
error: duplicate lang item in crate `core` (which `rustc_std_workspace_core` depends on): `bool`.
|
= note: the lang item is first defined in crate `core` (which `ufmt_write` depends on)
= note: first definition in `core` loaded from /home/todd/repos/personal/learn-electronics/posts/hello-world/07-multisegment-led-rust-arduino/code/multisegment-led/mseg-lib/target/avr-atmega328p/debug/deps/libcore-6f3cf281fc4322f8.rmeta
= note: second definition in `core` loaded from /home/todd/repos/personal/learn-electronics/posts/hello-world/07-multisegment-led-rust-arduino/code/multisegment-led/mseg-lib/target/avr-atmega328p/debug/deps/libcore-24dc0d086ab40efb.rmeta
稍后在错误输出中,这些是错误消息:
error: duplicate diagnostic item in crate `core`: `result_type`.
|
= note: the diagnostic item is first defined in crate `core`.
error[E0277]: the size for values of type `()` cannot be known at compilation time
--> /home/todd/.cargo/registry/src/github.com-1ecc6299db9ec823/bare-metal-0.2.5/src/lib.rs:10:10
|
10 | #[derive(Debug)]
| ^^^^^ doesn't have a size known at compile-time
|
::: /home/todd/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/result.rs:241:17
|
241 | pub enum Result<T,E> {
| - required by this bound in `core::result::Result`
|
= help: the trait `Sized` is not implemented for `()`
= note: this error originates in a derive macro (in Nightly builds,run with -Z macro-backtrace for more info)
问题
- 为什么要加载各种lang项目的两种不同实现?
- 解决方法是什么?
也请参见关于avr-hal
的讨论:
我仍在对此进行研究,但我认为这里有一些提示:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。