我的Rust项目突然就坏了

li9yvcax  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(384)

所以我对我的代码做了一些修改,并试图在我的工作电脑上编译它。我得到了以下与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)
laik7k3q

laik7k3q1#

出于某种原因(我不知道为什么),Cargo选择了一个旧版本的tokio,该版本(间接)使用了一个旧版本的ntapi,该版本使用了总是UB的a construct,但由于它在过去是允许的,它过去只会触发一个软的未来不兼容警告。但是as of Rust 1.69.0 it became a hard error,因此在工作中它没有编译。很可能你在家里的版本比较低,所以在那里工作。
通过将其版本设置为"1.28.0"(最新版本),强制Cargo使用新的tokio,它应该可以工作。

相关问题