75938


新規プロジェクトにexample
pingのコードをコピーし、Cargo.tomlを以下のようにして実行したところ、プログラムが途中で強制終了し以下のエラーがでるようになってしまいました。

[code]

    error: the 'cargo.exe' binary, normally provided by the 'cargo' component, is not applicable to the 'stable-x86_64-pc-windows-msvc' toolchain
    
[/code]

exampleを実行したときにはこのようなことが起こらなかったのでtomlファイルに何か記述が足りないのかと考えましたが、それがどれか分かりません。  
原因が分かる方がいらっしゃいましたらお答頂けると幸いです。

Cargo.toml:

[code]

    [dependencies]
    futures = "0.3.14"
    libp2p = "0.37.1"
    
[/code]

OS: Windows10 Home  
rustc: 1.52.0 stable  
cargo: 1.52.0

libp2p example ping:  
<https://github.com/libp2p/rust-libp2p/blob/master/Cargo.toml>


CC BY-SA 4.0
2021-05-09T09:31:09.213
75746
2021-05-18T16:02:43.070
2021-05-09T11:30:41.817
3060
45178
question
rust p2p
rust-libp2pのexampleのpingを模写して実行するとcargoが壊れる


私の予想ですが、ネットワークのプログラムを実行する際にAvastによって何かが変更されてしまったのではないかと考えております。


CC BY-SA 4.0
2021-05-18T08:18:49.433
75921
2021-05-18T08:18:49.433
45178
75746
answer


> 私の予想ですが、ネットワークのプログラムを実行する際にAvastによって何かが変更されてしまったのではないかと考えております。

エラーメッセージを確認したところ、rustupのプロキシーと呼ばれるプログラムが出したことがわかりました。

[rust-lang/rustup/src/toolchain.rs#L358-L361](https://github.com/rust-
lang/rustup/blob/7a051f7f02075b54da58bf59d107b635518b1ba5/src/toolchain.rs#L358-L361)

[code]

    if !component_status.available {
        return Err(anyhow!(format!(
            "the '{}' component which provides the command '{}' is not available for the '{}' toolchain",
            component_status.component.short_name(&manifest), binary_lossy, self.0.name)));
    }
    
[/code]

どうやらこのエラーはRustツールチェーンがインストール済みのステータスにもかかわらず、バイナリーファイル（今回は`cargo.exe`）が本来あるべき場所になかったときに起こるようです。

Windowsのことはよく知らないのですが、Avastというのはアンチウイルスソフトの一種でしょうか？
以下は仮説ですが、こんなことが起こったのかもしれません。

  1. 質問者さまがネットワークのプログラムを実行するために`cargo run`コマンドを実行した
  2. これにより`$Env:HOME\.cargo\bin\cargo.exe`バイナリーが実行される。が、実はこのバイナリーは`rustup`プロキシーで、`$Env:HOME\.rustup\toolchains\stable-x86_64-pc-windows-msvc\bin\cargo.exe`を起動するしくみになっている
  3. `.rustup\toolchains\ ... \cargo.exe`が起動し、プログラムのコンパイル後に、コンパイルで生成されたバイナリーを起動した
  4. そのバイナリーがlibp2pでネットーワークにアクセスしたところ、Avastがそれをウイルスによる活動だと誤認した
  5. Avastが、そのバイナリーの親プロセスにあたる`.rustup\toolchains\ ... \cargo.exe`を実行できないようにした。（削除したか、安全な場所に隔離した）
  6. 質問者さまが、もう一度、`cargo run`コマンドを実行した
  7. `rustup`プロキシーが`.rustup\toolchains\ ... \cargo.exe`を起動しようとしたが、Avastによって実行できなくされていたため、ご質問のエラーが発生した

もしAvastに活動内容の記録があれば、それを見るともう少しはっきりするかもしれません。


CC BY-SA 4.0
2021-05-18T15:54:03.430
75938
2021-05-18T16:02:43.070
2021-05-18T16:02:43.070
14101
14101
75746
answer