为什么我编译的bash(3.8M)比我的系统提供的更大(937K)?

时间:2012-11-03 02:28:07

标签: linux bash makefile gnu-coreutils

我在这里下载了bash shell 4.2版表单:http://ftp.gnu.org/gnu/bash/,然后使用以下命令自行编译:

./configure
make

但是我编译的bash比一个系统提供的要大得多:

这是我的bash:

$ 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

3 个答案:

答案 0 :(得分:5)

如果您运行strip(1),则尺寸会更紧密地匹配。正如Tim Post指出的那样,bash的生产目标不会剥离,因为他们假设用户想要调试符号。然而,分销目标确实脱离了。

答案 1 :(得分:3)

假设您已经下载了与系统版本直接匹配的bash源代码,那么有几件事可能会有所不同:

  • Bash有一个很多的构建配置选项,因为它是现有最便携的软件之一。默认./configure将选择大多数人希望在您用于构建系统的系统上运行的选项。

  • bash的生产安装目标剥离已安装的可执行文件。下载bash源代码并自己构建它的大多数人可能都是这样做的,因为他们想要的行为不同于他们提供的OS,或者完全不同的版本。在任何一种情况下,人们都希望调试符号保持不变,直到稳定性已经确定。

  • 分发添加的'特制酱'

要直接重现构建,您需要获取发行版提供的包的源代码,并使用构建工具(或者,只需从中获取构建配置选项并应用它们它们是您下载的版本),然后删除生成的可执行文件。

请记住,发行版完全可以自由地将他们自己的补丁(或“酱”)应用到他们打包的东西上。您还必须检查这一点,并确保应用相同的补丁来破坏您的发行版。

简而言之,除非你想使用GNU提供的官方发行版,否则只需从你的发行版中获取源代码包就更容易了。

答案 2 :(得分:0)

如果不知道你和软件包维护者如何编译bash,就不可能确切地知道原因。

您可以静态链接在系统提供的包中动态链接的某些库。也许他们编译时启用了更少的功能。也许他们使用了不同的编译标志,如果你有一些调试符号,但包已被完全剥离,这也会造成一些差异。不同的优化级别也会对尺寸产生影响。