我在这里下载了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
答案 0 :(得分:5)
如果您运行strip(1)
,则尺寸会更紧密地匹配。正如Tim Post指出的那样,bash的生产目标不会剥离,因为他们假设用户想要调试符号。然而,分销目标确实脱离了。
答案 1 :(得分:3)
假设您已经下载了与系统版本直接匹配的bash源代码,那么有几件事可能会有所不同:
Bash有一个很多的构建配置选项,因为它是现有最便携的软件之一。默认./configure
将选择大多数人希望在您用于构建系统的系统上运行的选项。
bash的生产安装目标不剥离已安装的可执行文件。下载bash源代码并自己构建它的大多数人可能都是这样做的,因为他们想要的行为不同于他们提供的OS,或者完全不同的版本。在任何一种情况下,人们都希望调试符号保持不变,直到稳定性已经确定。
分发添加的'特制酱'
要直接重现构建,您需要获取发行版提供的包的源代码,并使用构建工具(或者,只需从中获取构建配置选项并应用它们它们是您下载的版本),然后删除生成的可执行文件。
请记住,发行版完全可以自由地将他们自己的补丁(或“酱”)应用到他们打包的东西上。您还必须检查这一点,并确保应用相同的补丁来破坏您的发行版。
简而言之,除非你想使用GNU提供的官方发行版,否则只需从你的发行版中获取源代码包就更容易了。
答案 2 :(得分:0)
如果不知道你和软件包维护者如何编译bash,就不可能确切地知道原因。
您可以静态链接在系统提供的包中动态链接的某些库。也许他们编译时启用了更少的功能。也许他们使用了不同的编译标志,如果你有一些调试符号,但包已被完全剥离,这也会造成一些差异。不同的优化级别也会对尺寸产生影响。