2

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

./configure
make

但是我编译的 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
4

3 回答 3

5

如果你跑,尺寸会更接近strip(1)。正如 Tim Post 所指出的,bash 的生产 make 目标不会剥离,因为它们假设用户想要调试符号。但是分发目标确实剥离。

于 2012-11-03T02:39:25.220 回答
3

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

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

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

  • 分配添加的“特殊酱汁”

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

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

简而言之,如果您只想复制构建,那么从您的发行版中获取源包会更容易,除非您想使用 GNU 提供的官方发布版本。

于 2012-11-03T02:45:27.430 回答
0

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

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

于 2012-11-03T02:31:29.870 回答