[解決済み】Rustの実行ファイルはなぜこんなに巨大なのですか?
質問
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ライブラリとランタイムを静的にリンクすることをお勧めします。
関連
-
[解決済み] 構造体や配列を印刷するには?
-
[解決済み] Rust の `String` と `str` の違いは何ですか?
-
[解決済み] Rustのユニットテストでprintln! が動作しないのはなぜ?
-
[解決済み】ある値とその値への参照を同じ構造体に格納できないのはなぜですか?
-
[解決済み】ライブラリとバイナリの両方を持つRustパッケージ?
-
[解決済み】なぜRustでは明示的なライフタイムが必要なのですか?
-
[解決済み】RustプログラムがCargoパッケージからメタデータにアクセスする方法は?
-
[解決済み] CopyとCloneの違いは何ですか?
-
[解決済み] Cargoで複数のバイナリをビルドするにはどうしたらいいですか?
-
[解決済み】iterとinto_iterの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RustのRc::clone(&rc)とrc.clone()は何か違いがあるのでしょうか?また、それによるコンパイルの最適化はあるのでしょうか?
-
[解決済み] Rustで絶対値を求めるには?
-
[解決済み] 構造体や配列を印刷するには?
-
[解決済み] なぜRustコンパイラは、2つのミュータブル参照がエイリアスできないと仮定してコードを最適化しないのですか?
-
[解決済み】Rustの正確な自動再参照のルールは?
-
[解決済み] 同じプロジェクトの別のファイルからモジュールをインクルードする方法は?
-
[解決済み] バイトのベクター(u8)を文字列に変換するには?
-
[解決済み] Cargoで複数のバイナリをビルドするにはどうしたらいいですか?
-
[解決済み] Rust の 128 ビット整数 `i128` は 64 ビットシステムでどのように動作するのでしょうか?
-
[解決済み] アポストロフィが1つ付いているラストタイプは何ですか?