2

http://ftp.gnu.org/gnu/bash/からbash シェル バージョン 4.2 フォームをダウンロードし、次のコマンドを使用して自分でコンパイルしました。

./configure
make

しかし、私がコンパイルした bash は、提供された 1 つのシステムよりもはるかに大きくなっています。

これは私のバッシュです:

$ ls -lh bash
-rwxrwxr-x 1 unimous unimous 3.8M Oct 31 23:57 bash

これはシステムの bash です:

$ ls -hl /bin/bash 
-rwxr-xr-x 1 root root 937K Sep 19 21:40 /bin/bash
4

3 に答える 3

5

を実行した場合、サイズはより厳密に一致しますstrip(1)。Tim Post が指摘しているように、bash のプロダクション make ターゲットは、ユーザーがデバッグ シンボルを必要としていることを想定しているため、ストリップしません。ただし、配布ターゲットは削除されます。

于 2012-11-03T02:39:25.220 に答える
3

システムのバージョンと直接一致する bash のソースをダウンロードしたと仮定すると、異なる点がいくつかあります。

  • Bash は、現存するソフトウェアの中で最も移植性が高いものの 1 つであるため、多くのビルド構成オプションがあります。デフォルト./configureでは、ビルドに使用しているシステムで機能する、ほとんどの人が望むオプションが選択されます。

  • bash のプロダクション インストール ターゲットは、インストールされた実行可能ファイルを削除しませ。bash のソースをダウンロードして自分でビルドするほとんどの人は、OS が提供するものとは異なる動作をしたい、またはまったく異なるバージョンを望んでいるため、おそらくそうしています。どちらの場合でも、安定性が確立されるまでデバッグ シンボルを残しておきたいと思うでしょう。

  • 配信で追加された「特製ソース」

ビルドを直接再現するには、ディストリビューションが提供するパッケージのソースを取得し、ビルド ツールを使用する必要があります (または、それらからビルド構成オプションを取得して、ダウンロードしたバージョンに適用します)。結果の実行可能ファイル。

ディストリビューションは、パッケージ化されたものに独自のパッチ (または「ソース」) を完全に自由に適用できることに注意してください。これも確認する必要があり、ディストリビューションが行ったのと同じパッチを bash に適用してください。

つまり、GNU が提供する公式リリース バージョンを使用する場合を除き、ビルドを再現するだけであれば、ディストリビューションからソース パッケージを取得する方が簡単です。

于 2012-11-03T02:45:27.430 に答える
0

あなたとパッケージ メンテナーの両方がどのように bash をコンパイルしたかを知らなければ、その理由を正確に知ることは不可能です。

システム提供のパッケージで動的にリンクされている特定のライブラリを静的にリンクしている可能性があります。おそらく、より少ない機能を有効にしてコンパイルしたのでしょう。いくつかのデバッグ シンボルが含まれていても、パッケージが完全に削除されている場合は、異なるコンパイル フラグが使用されている可能性があります。異なる最適化レベルもサイズに影響します。

于 2012-11-03T02:31:29.870 に答える