2012-11-03 48 views
2

我這裏下載的bash shell 4.2版形式:http://ftp.gnu.org/gnu/bash/,然後使用以下命令由我自己編吧:爲什麼我編譯的bash(3.8M)比我的系統提供的(937K)更大?

./configure 
make 

但是編譯的bash我是更大然後提供一個系統:

這是我的bash:

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

這是系統的慶典:

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

如果你運行'strip(1)',大小會更接近匹配嗎? –

+0

@JosephQuinsey我想補充一點,作爲答案。 bash的生產目標不會剝離,因爲它們假設用戶需要調試符號,但是分發目標_do_ strip。你應該做出正確的回答:) –

+0

@JosephQuinsey謝謝,它的工作原理! –

回答

3

假設你已經下載了慶典的來源,直接在系統的版本相匹配,有幾件事情,可能是不同的:

  • 猛砸有構建配置選項的很多,因爲它是一個現存最便攜的軟件。默認./configure將選擇大多數人希望在你用來構建它的系統上工作的選項。

  • bash的生產安裝目標是而不是剝離安裝的可執行文件。大多數下載bash源代碼並自行構建的人可能是這樣做的,因爲他們需要不同於他們的操作系統提供的行爲,或者完全不同的版本。無論哪種情況,人們都會希望調試符號保持不變,直到穩定性建立。

  • 「特別醬」被分配添加

要直接複製的身材,你需要得到源到您的發行提供的包,並使用構建工具(或,只需從它們中獲取構建配置選項並將它們應用於您下載的版本),然後去除生成的可執行文件。

請記住,安裝都是完全免費的,以自己的補丁程序(或「醬」)適用於他們打包的東西。您也必須檢查這一點,並確保將相同的修補程序應用於bash,以便發佈。

總之,它更容易剛剛從你的發行版搶源碼包,如果你想要做的就是複製構建,除非你想用正式發佈的版本,GNU提供。

0

這是不可能確切地知道,爲什麼不知道你和軟件包的維護者如何被編譯的bash。

這是可能的,你靜態鏈接的是在系統中提供的包動態鏈接某些庫。也許他們使用更少的功能進行編譯。也許他們使用了不同的編譯標誌,如果你有一些調試符號,但是這個包已經被完全剝離了,那也會造成一些不同。不同的優化級別也會影響規模。如果您運行strip(1)

5

大小會更緊密地匹配。正如Tim Post指出的那樣,生產使得bash的目標不會被剝離,因爲他們假設用戶需要調試符號。但分銷​​目標會剝離。

相關問題