所以我对我的代码做了一些修改,并试图在我的工作电脑上编译它。我得到了以下与ntapi包相关的错误:
error[E0793]: reference to packed field is unaligned
--> C:\Users\u\.cargo\registry\src\github.com-1eccb9ec823\ntapi-0.3.6\src\ntexapi.rs:2785:52
|
2785 | *tick_count.QuadPart_mut() = read_volatile(&(*USER_SHARED_DATA).u.TickCountQuad);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
= help: copy the field contents to a local variable, or replace the reference with a raw pointer and use `read_unaligned`/`write_unaligned` (loads and stores via `*p` must be properly aligned even when using raw pointers)
error[E0793]: reference to packed field is unaligned
--> C:\Users\u\.cargo\registry\src\github.com-1ecc9ec823\ntapi-0.3.6\src\ntexapi.rs:2809:25
|
2809 | ((read_volatile(&(*USER_SHARED_DATA).u.TickCountQuad)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
= help: copy the field contents to a local variable, or replace the reference with a raw pointer and use `read_unaligned`/`write_unaligned` (loads and stores via `*p` must be properly aligned even when using raw pointers)
For more information about this error, try `rustc --explain E0793`.
error: could not compile `ntapi` due to 2 previous errors
warning: build failed, waiting for other jobs to finish...
接下来的几个小时里,他们试图找出问题所在。正如在this线程中所描述的,我试图强制更新ntapi,但我没有做到这一点。当我回到家,我提交的变化,并拉上我的家庭电脑。原来它编译没有问题,在我的家庭电脑。我很困惑有人知道这里发生了什么吗?
Cargo.toml:
[package]
name = "caravel"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
tokio = { version = "1", features = ["full"] }
futures = "0.3"
anyhow = "1.0.32"
clap = "3.0.0-beta.5"
structopt = "0.3.16"
shell-words = "1.0.0"
futures-util = "0.3.17"
env_logger = "0.9"
log = "0.4"
[target.'cfg(not(target_os = "windows"))'.dependencies]
tokio-socketcan = "0.3.0"
采油树输出:
caravel v0.1.0 ()
├── anyhow v1.0.44
├── clap v3.0.0-beta.5
│ ├── atty v0.2.14
│ │ └── winapi v0.3.9
│ ├── bitflags v1.3.2
│ ├── clap_derive v3.0.0-beta.5 (proc-macro)
│ │ ├── heck v0.3.3
│ │ │ └── unicode-segmentation v1.8.0
│ │ ├── proc-macro-error v1.0.4
│ │ │ ├── proc-macro-error-attr v1.0.4 (proc-macro)
│ │ │ │ ├── proc-macro2 v1.0.29
│ │ │ │ │ └── unicode-xid v0.2.2
│ │ │ │ └── quote v1.0.10
│ │ │ │ └── proc-macro2 v1.0.29 (*)
│ │ │ │ [build-dependencies]
│ │ │ │ └── version_check v0.9.3
│ │ │ ├── proc-macro2 v1.0.29 (*)
│ │ │ ├── quote v1.0.10 (*)
│ │ │ └── syn v1.0.80
│ │ │ ├── proc-macro2 v1.0.29 (*)
│ │ │ ├── quote v1.0.10 (*)
│ │ │ └── unicode-xid v0.2.2
│ │ │ [build-dependencies]
│ │ │ └── version_check v0.9.3
│ │ ├── proc-macro2 v1.0.29 (*)
│ │ ├── quote v1.0.10 (*)
│ │ └── syn v1.0.80 (*)
│ ├── indexmap v1.7.0
│ │ └── hashbrown v0.11.2
│ │ [build-dependencies]
│ │ └── autocfg v1.0.1
│ ├── lazy_static v1.4.0
│ ├── os_str_bytes v4.2.0
│ │ └── memchr v2.4.1
│ ├── strsim v0.10.0
│ ├── termcolor v1.1.2
│ │ └── winapi-util v0.1.5
│ │ └── winapi v0.3.9
│ ├── textwrap v0.14.2
│ │ └── unicode-width v0.1.9
│ └── unicase v2.6.0
│ [build-dependencies]
│ └── version_check v0.9.3
├── env_logger v0.9.0
│ ├── atty v0.2.14 (*)
│ ├── humantime v2.1.0
│ ├── log v0.4.14
│ │ └── cfg-if v1.0.0
│ ├── regex v1.5.4
│ │ ├── aho-corasick v0.7.18
│ │ │ └── memchr v2.4.1
│ │ ├── memchr v2.4.1
│ │ └── regex-syntax v0.6.25
│ └── termcolor v1.1.2 (*)
├── futures v0.3.17
│ ├── futures-channel v0.3.17
│ │ ├── futures-core v0.3.17
│ │ └── futures-sink v0.3.17
│ ├── futures-core v0.3.17
│ ├── futures-executor v0.3.17
│ │ ├── futures-core v0.3.17
│ │ ├── futures-task v0.3.17
│ │ └── futures-util v0.3.17
│ │ ├── futures-channel v0.3.17 (*)
│ │ ├── futures-core v0.3.17
│ │ ├── futures-io v0.3.17
│ │ ├── futures-macro v0.3.17 (proc-macro)
│ │ │ ├── proc-macro-hack v0.5.19 (proc-macro)
│ │ │ ├── proc-macro2 v1.0.29 (*)
│ │ │ ├── quote v1.0.10 (*)
│ │ │ └── syn v1.0.80 (*)
│ │ │ [build-dependencies]
│ │ │ └── autocfg v1.0.1
│ │ ├── futures-sink v0.3.17
│ │ ├── futures-task v0.3.17
│ │ ├── memchr v2.4.1
│ │ ├── pin-project-lite v0.2.7
│ │ ├── pin-utils v0.1.0
│ │ ├── proc-macro-hack v0.5.19 (proc-macro)
│ │ ├── proc-macro-nested v0.1.7
│ │ └── slab v0.4.5
│ │ [build-dependencies]
│ │ └── autocfg v1.0.1
│ ├── futures-io v0.3.17
│ ├── futures-sink v0.3.17
│ ├── futures-task v0.3.17
│ └── futures-util v0.3.17 (*)
├── futures-util v0.3.17 (*)
├── log v0.4.14 (*)
├── shell-words v1.0.0
├── structopt v0.3.25
│ ├── clap v2.33.3
│ │ ├── atty v0.2.14 (*)
│ │ ├── bitflags v1.3.2
│ │ ├── strsim v0.8.0
│ │ ├── textwrap v0.11.0
│ │ │ └── unicode-width v0.1.9
│ │ ├── unicode-width v0.1.9
│ │ └── vec_map v0.8.2
│ ├── lazy_static v1.4.0
│ └── structopt-derive v0.4.18 (proc-macro)
│ ├── heck v0.3.3 (*)
│ ├── proc-macro-error v1.0.4 (*)
│ ├── proc-macro2 v1.0.29 (*)
│ ├── quote v1.0.10 (*)
│ └── syn v1.0.80 (*)
└── tokio v1.12.0
├── bytes v1.1.0
├── memchr v2.4.1
├── mio v0.7.13
│ ├── log v0.4.14 (*)
│ ├── miow v0.3.7
│ │ └── winapi v0.3.9
│ ├── ntapi v0.3.6
│ │ └── winapi v0.3.9
│ └── winapi v0.3.9
├── num_cpus v1.13.0
│ └── libc v0.2.103
├── once_cell v1.8.0
├── parking_lot v0.11.2
│ ├── instant v0.1.11
│ │ └── cfg-if v1.0.0
│ ├── lock_api v0.4.5
│ │ └── scopeguard v1.1.0
│ └── parking_lot_core v0.8.5
│ ├── cfg-if v1.0.0
│ ├── instant v0.1.11 (*)
│ ├── smallvec v1.7.0
│ └── winapi v0.3.9
├── pin-project-lite v0.2.7
├── tokio-macros v1.4.1 (proc-macro)
│ ├── proc-macro2 v1.0.29 (*)
│ ├── quote v1.0.10 (*)
│ └── syn v1.0.80 (*)
└── winapi v0.3.9
[build-dependencies]
└── autocfg v1.0.1
货物-V:
cargo 1.69.0 (6e9a83356 2023-04-12)
1条答案
按热度按时间laik7k3q1#
出于某种原因(我不知道为什么),Cargo选择了一个旧版本的
tokio
,该版本(间接)使用了一个旧版本的ntapi
,该版本使用了总是UB的a construct,但由于它在过去是允许的,它过去只会触发一个软的未来不兼容警告。但是as of Rust 1.69.0 it became a hard error,因此在工作中它没有编译。很可能你在家里的版本比较低,所以在那里工作。通过将其版本设置为
"1.28.0"
(最新版本),强制Cargo使用新的tokio
,它应该可以工作。