質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

1回答

1896閲覧

【Rust】encoding_rsを用いたクレートをrustcでコンパイルできない

noid

総合スコア3

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2021/12/20 11:42

経緯・発生している問題

Rust初学者です。
RustでUTAUというフリーな歌唱音声合成ソフトのプラグインを作ってみたいなと思い、こちらのサイト(https://yun.cup.com/utauplugins.html)を参考に開発をしていたところ、Shift_JIS→UTF8変換のためにencoding_rsという外部クレートを使い始めてから`rustc`が以下のようなエラーを吐くようになりました。

error[E0432]: unresolved import `encoding_rs` --> src/main.rs:2:5 | 2 | use encoding_rs::SHIFT_JIS; | ^^^^^^^^^^^ maybe a missing crate `encoding_rs`? error: aborting due to previous error For more information about this error, try `rustc --explain E0432`.

何を間違えたのかと思いコードを見直してみてもそれらしい問題は見つからず、おかしいなと思いCargo buildCargo checkCargo runを試したところ、いずれも正常に実行されました。

なぜrustcのみがエラーを吐いてしまったのでしょうか...?またこのエラーを解決し、正常にコンパイルするにはどうすればよいのでしょうか...?

該当のソースコード

Rust

1use std::{io::{stdin,stdout,Write,Read},env,fs::*,error::Error,process}; 2use encoding_rs::SHIFT_JIS; 3 4fn main()->Result<(),Box<dyn Error>>{ 5 let args: Vec<String>=env::args().collect(); 6 let tmpfile; 7 if let None=args.get(1){ 8 eprint!("Error:不明なエラーが発生しました.\n"); 9 eprint!("UTAUから正常にファイルパスが渡されませんでした.\n"); 10 process::exit(1); 11 } 12 else{ 13 tmpfile=args.get(1).unwrap(); 14 } 15 16 let file_byte=read_file_as_byte(tmpfile); 17 let (decoded,_,_)=SHIFT_JIS.decode(&file_byte); 18 let uta_data=decoded.into_owned(); 19 20 for line in uta_data.split("\n"){ 21 print!("{}\n",line); 22 } 23 24 let mut end=String::new(); 25 print!("任意のキー+Enterでプログラムを終了します.\n"); stdout().flush().unwrap(); 26 stdin().read_line(&mut end)?; 27 28 Ok(()) 29} 30 31fn read_file_as_byte(filename: &String)->Vec<u8>{ 32 let mut file=match File::open(filename){ 33 Ok(ok)=>ok, 34 Err(err)=>{ 35 eprint!("Error:File::open()\n{}\n",err); 36 eprint!("見つかったファイルパス:{}\n",filename); 37 process::exit(1); 38 } 39 }; 40 41 let metadata=metadata(&filename).expect("Error:メタデータを読み取れませんでした.\n"); 42 let mut buffer=vec![0;metadata.len() as usize]; 43 file.read(&mut buffer).expect("Error:バッファのオーバーフローが発生しました.\n"); 44 45 buffer 46}

試したこと

Cargo.tomlのeditionを2015にした上で、先のソースコードの先頭にextern crate encoding_rs;の記述を追加しましたが、解決には至りませんでした。

補足情報

Cargo.toml

[package] name = "even_scale" version = "0.1.0" edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] encoding_rs = "0.8.30"

開発環境
Visual Studio Code ver. 1.61

実行環境
CPU:Intel Core i5 1.10 - 1.50[GHz]
OS:Windows 10 Home ver. 21H1
メモリ:8.00[GB]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらくターミナルからrustcを直接実行しているのだと思います。rustcは自力で依存クレートの解決はできません。そのためにエラーになっているのだと思います。

もしそうしているのなら、今後はcargo checkcargo buildでコンパイルするようにしてください。CargoはCargo.tomlの内容を見て、依存しているクレートについて1つずつ、rustcに適切なコマンドライン引数を付けて実行してくれます。(cargo check -vとするとその様子を見られます)

投稿2021/12/20 13:35

tatsuya6502

総合スコア2035

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noid

2021/12/20 14:00

丁寧なご説明ありがとうございます!納得しました! なるほど...cargoが管理してくれているからこそのrustcであって、何も考えず単体で使うべきではないということですね。 ありがとうございます!
tatsuya6502

2021/12/20 14:12

解決してよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問