watchexec / cargo-watch

Watches over your Cargo project's source.
Creative Commons Zero v1.0 Universal
2.74k stars 80 forks source link

`cargo install` failed on Windows 11 #304

Closed tk-nguyen closed 4 months ago

tk-nguyen commented 5 months ago

Hello, I'm trying to install cargo-watch on Windows 11 with cargo install, but it ran into an issue while compiling:

$ cargo install cargo-watch
    Updating crates.io index
  Installing cargo-watch v8.5.2
    Updating crates.io index
   Compiling proc-macro2 v1.0.81
   Compiling unicode-ident v1.0.12
   <... lots of lines ...>
   Compiling which v4.4.2
   Compiling darling_core v0.12.4
   Compiling notify v4.0.17
   Compiling command-group v1.0.8
error[E0308]: mismatched types
   --> C:\Users\thainguyen\.cargo\registry\src\index.crates.io-6f17d22bba15001f\notify-4.0.17\src\windows.rs:276:29
    |
276 |         overlapped.hEvent = request_p;
    |         -----------------   ^^^^^^^^^ expected `winapi::ctypes::c_void`, found `libc::c_void`
    |         |
    |         expected due to the type of this binding
    |
    = note: `libc::c_void` and `winapi::ctypes::c_void` have similar names, but are actually distinct types
note: `libc::c_void` is defined in crate `core`
   --> C:\Users\thainguyen\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib/rustlib/src/rust\library\core\src\ffi\mod.rs:183:1
    |
183 | pub enum c_void {
    | ^^^^^^^^^^^^^^^
note: `winapi::ctypes::c_void` is defined in crate `winapi`
   --> C:\Users\thainguyen\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winapi-0.3.9\src\lib.rs:38:5
    |
38  |     pub enum c_void {}
    |     ^^^^^^^^^^^^^^^

error[E0308]: mismatched types
    --> C:\Users\thainguyen\.cargo\registry\src\index.crates.io-6f17d22bba15001f\notify-4.0.17\src\windows.rs:282:13
     |
280  |         let ret = winbase::ReadDirectoryChangesW(
     |                   ------------------------------ arguments to this function are incorrect
281  |             handle,
282  |             req_buf,
     |             ^^^^^^^ expected `winapi::ctypes::c_void`, found `libc::c_void`
     |
     = note: `libc::c_void` and `winapi::ctypes::c_void` have similar names, but are actually distinct types
note: `libc::c_void` is defined in crate `core`
    --> C:\Users\thainguyen\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib/rustlib/src/rust\library\core\src\ffi\mod.rs:183:1
     |
183  | pub enum c_void {
     | ^^^^^^^^^^^^^^^
note: `winapi::ctypes::c_void` is defined in crate `winapi`
    --> C:\Users\thainguyen\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winapi-0.3.9\src\lib.rs:38:5
     |
38   |     pub enum c_void {}
     |     ^^^^^^^^^^^^^^^
note: function defined here
    --> C:\Users\thainguyen\.cargo\registry\src\index.crates.io-6f17d22bba15001f\winapi-0.3.9\src\um\winbase.rs:2072:12
     |
2072 |     pub fn ReadDirectoryChangesW(
     |            ^^^^^^^^^^^^^^^^^^^^^

For more information about this error, try `rustc --explain E0308`.
error: could not compile `notify` (lib) due to 2 previous errors
warning: build failed, waiting for other jobs to finish...
error: failed to compile `cargo-watch v8.5.2`, intermediate artifacts can be found at `C:\Users\THAING~1\AppData\Local\Temp\cargo-installzpBRP9`.
To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path.

Here's my current rust and cargo version:

$ cargo --version --verbose
cargo 1.78.0 (54d8815d0 2024-03-26)
release: 1.78.0
commit-hash: 54d8815d04fa3816edc207bbc4dd36bf18014dbc
commit-date: 2024-03-26
host: x86_64-pc-windows-msvc
libgit2: 1.7.2 (sys:0.18.2 vendored)
libcurl: 8.6.0-DEV (sys:0.4.72+curl-8.6.0 vendored ssl:Schannel)
os: Windows 10.0.22631 (Windows 11 Education) [64-bit]

$ rustc --version --verbose
rustc 1.78.0 (9b00956e5 2024-04-29)
binary: rustc
commit-hash: 9b00956e56009bab2aa15d7bff10916599e3d6d6
commit-date: 2024-04-29
host: x86_64-pc-windows-msvc
release: 1.78.0
LLVM version: 18.1.2
passcod commented 4 months ago

Try with --locked? Or use a binary release

tk-nguyen commented 4 months ago

Try with --locked? Or use a binary release

cargo install --locked seems to work fine. Thanks!

$ cargo install --locked cargo-watch
    Updating crates.io index
  Installing cargo-watch v8.5.2
    Updating crates.io index
warning: package `iana-time-zone v0.1.59` in Cargo.lock is yanked in registry `crates-io`, consider running without --locked
    Updating crates.io index
  Downloaded autocfg v1.1.0
  Downloaded bitflags v2.4.1
  Downloaded cargo-platform v0.1.6
  Downloaded itoa v1.0.10
  <... lots of lines ...>   
   Compiling cargo-watch v8.5.2
    Finished `release` profile [optimized] target(s) in 1m 00s
  Installing C:\Users\thainguyen\.cargo\bin\cargo-watch.exe
   Installed package `cargo-watch v8.5.2` (executable `cargo-watch.exe`)
GarethRader commented 4 months ago

Hello, for what its worth: I encountered the same issue and error messages using the gnu-windows toolchain on windows 11. Using cargo install --locked seemed to work as well.

cargo install cargo-watch was working previously on my setup from about 2 months ago when I was switching from msvc to gnu windows toolchains..

passcod commented 4 months ago

Yeah, unfortunately it's nothing cargo-watch has done, it's dependencies breaking in the background. Locked installs (or binaries, or binstall, or packages) are the way to go for now.

lubomir-kurcak commented 4 months ago

Just encountered this issue as well, maybe it would be a good idea to put a note to the README about trying the --locked version in case installation fails.