1. ホーム

[解決済み】Rustの実行ファイルはなぜこんなに巨大なのですか?

2022-04-02 02:26:23

質問

Rustを見つけ、ドキュメントの最初の2章を読んだところ、そのアプローチと言語の定義が特に興味深いと感じました。そこで、指を濡らしてHello worldから始めてみることにしました...

Windows 7 x64でやりました、乙です。

fn main() {
    println!("Hello, world!");
}

発行する cargo build で結果を見ます。 targets\debug 結果的に .exe 3MBである。カーゴコマンドラインフラグのドキュメントを探すのに苦労しました...)。 --release オプションを付けて、リリースビルドを作成しました。驚いたことに、.exeのサイズは些細な量しか小さくなっていません。3MBではなく、2.99MBです。

私はRustとそのエコシステムの初心者ですが、システムプログラミング言語であればコンパクトなものを作ってくれるだろうと期待していました。

Rustは何を目指してコンパイルしているのか、3行のプログラムからどうしてこのような巨大なイメージを生成できるのか、どなたか詳しく教えていただけませんか?仮想マシンにコンパイルしているのでしょうか?私が見逃したstripコマンド(リリースビルド内のデバッグ情報?)があるのでしょうか?他に何が起こっているのか理解できるようなことがあれば教えてください。

解決方法は?

Rust はプログラムのコンパイルにスタティックリンクを使用するため、最も単純な Hello world! のプログラムは、実行ファイルにコンパイルされます。これには、Rust ランタイムも含まれます。

Rust にプログラムの動的リンクを強制するには、コマンドライン引数 -C prefer-dynamic この場合、ファイルサイズはかなり小さくなります。 しかし は、プログラムの実行時に Rust ライブラリ (ランタイムを含む) が利用可能であることも要求されます。 これは、コンピュータがライブラリを持っていない場合、あなたがライブラリを提供する必要があることを意味し、そのために より は、静的にリンクされたオリジナルのプログラムよりも大きなスペースを必要とします。

移植性を考慮し、プログラムを他の人に配布する場合は、これまでの方法でRustライブラリとランタイムを静的にリンクすることをお勧めします。