久々にRustに取り組んで困ったこと
事象
新規でRustのアプリケーションを作成しようとして、起動しようとしたら大量のエラーを吐き出した。
結果としては、
- 以前取り組んだ時から数ヶ月も経っていること
- PCのOS自体が違っていること
- Xcodeを全く起動していなかったこと←これが重要かも
と、上記内容が大きな原因となっていたので、調べた結果など簡単にまとめてみました
プロジェクトの作成
cargo new [application name]
コマンドで新しく作成する
cargo run
と打つと、最初なので「Hello world!」が表示される、、、はずだった
「cargo run」コマンド時のエラー
少し書き換えたのでそのせいかと思いましたが、内容が全然違っていたのでまとめてみました
エラー内容(長かったので抜粋しています)
note: You have not agreed to the Xcode license agreements, please run 'sudo xcodebuild -license' from within a Terminal window to review and agree to the Xcode license agreements.
error: linking with `cc` failed: exit status: 69
とエラー内容が表示されていた。
調べてみた
少しググってみたのですが、Xcodeのライセンスが、、、とのことでした。
思い返すとRustを再び取り組んだのも半年以上前で、PC自体も以前使っていたものだったのでOSも変わってXcodeも最近開いていないしとそのせいなようでした。
ちなみに以前は
macOS Big Sur version11.5.2 Intel
に対して今回は
macOS Monterey version12.5 M1Pro
とチップもバージョンもOSも全て違うのが原因の一つでした。
xcode-select --install
と打つも下記のエラー
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
ソフトウェアをアップデートしてくれと
(もちろん上記のOS等の違いもあり当然かと思いました。)
softwareupdate --list
リストの取得をしてみると下記の結果に
Software Update Tool
Finding available software
Software Update found the following new or updated software:
* Label: Command Line Tools for Xcode-14.0
Title: Command Line Tools for Xcode, Version: 14.0, Size: 687109KiB, Recommended: YES,
* Label: Safari16.2MontereyAuto-16.2
Title: Safari, Version: 16.2, Size: 130909KiB, Recommended: YES,
* Label: Command Line Tools for Xcode-14.2
Title: Command Line Tools for Xcode, Version: 14.2, Size: 687573KiB, Recommended: YES,
softwareupdate -i "Command Line Tools for Xcode-14.2"
Software Update Tool
Finding available software
Downloaded Command Line Tools for Xcode
Installing Command Line Tools for Xcode
Done with Command Line Tools for Xcode
Done.
ここで自分はXcodeが原因だとようやく把握したので、最近起動していなかったXcodeを起動
アップデートなど一通り終えたら再びcargo run
のコマンドを打った
今度は起動時のエラー
thread 'main' panicked at 'System is not running', /Users/takeuchishougo/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-rt-1.1.1/src/system.rs:78:21
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
と表示された
内容としては
「注意: バックトレースを表示するために環境変数RUST_BACKTRACE=1をつけて実行してね」
ってメッセージなので
export RUST_BACKTRACE=1
ちなみに、こうすることでクレートの中まで追ってエラー原因を特定したいときには、バックトレースを表示する。 バックトレースが表示できどんな内容か把握したので、今後エラーメッセージだけで分からないときに原因を追えるようになった。
として再びcargo run
そして大量のエラーの後、
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
さらに「RUST_BACKTRACK=full」まであるよ。とのことなので
export RUST_BACKTRACK=full
として再び
cargo run
とするとエラーの箇所が表示された
ちなみに最後の行に
74: 0x100306076 - <unknown>
at /Users/takeuchishougo/rust/todo/src/main.rs:12:18
とmain.rsの12行目でエラーが起きていたみたいでした。
修正して、cargo.tomlにあるクレートのバージョンも修正
その後cargo run
とすると無事起動できた
Discussion