簡體   English   中英

相同的源代碼,不同的可執行文件大小?

[英]Same source code, different executable size?

在 AIX 中,不同版本的編譯器可以使可執行文件(或庫)大小不同嗎?

問題

什么會影響可執行文件/庫的大小?

  • 不同版本的編譯器。
  • 不同的編譯選項。
  • 不同的操作系統版本及其庫(如 libm.a、libpthread.a ..)。
  • 更多的?

一些背景。

在這里,我們有一堆舊的可執行文件和庫,它們不是受版本控制的源代碼。 我們需要弄清楚可執行文件是根據我們擁有的源代碼構建的。 所以我們再次構建它,但結果(exec,libs)的大小不一樣。

嘗試..

我試過..

  • dump -X64 -c :它顯示了構建它時使用的編譯器的一些信息。 二進制文件的編譯器版本是“IBM XL C/C++ .. 11.1.0.14”。 但是我們擁有的編譯器版本是“IBM .. 11.1.0.13”。 這些能有所作為嗎?
  • ar -X64 -x :比較從存檔中提取的文件。 當我“制作”一些庫時,生成了目標文件(*.o)。 大多數文件的大小相同,但有些文件不一樣。 當轉儲它們(具有不同大小的文件)時,編譯器是不一樣的。

任何幫助、建議、鏈接都會有所幫助。 謝謝你。

什么會影響可執行文件/庫的大小?

不同版本的編譯器。

當然! 它可以生成非常不同的二進制文件,不僅大小不同。 它從不同位置的代碼開始,對於相同的源代碼完全不同的匯編。

不同的編譯選項。

它必須改變大小! 如果您針對大小或速度進行優化,結果肯定會有所不同。 想想循環展開...

不同的操作系統版本及其庫(如 libm.a、libpthread.a ..)。

因為它們也是用不同的編譯器編譯的,所以答案是遞歸的 :-)

更多的?

也許是一個無窮無盡的清單? 鏈接時文件的排序、不同的鏈接器選項、...

我的提示:

可執行文件的大小只是第一次檢查。 您可以擁有相同大小的不同可執行文件,這很清楚。

即使您使用相同的編譯器和相同的庫並運行相同的操作系統,您也需要使用相同的構建腳本/make 進行構建以獲得相同的結果。 如果有任何不同(編譯器/庫/編譯器和/或鏈接器標志、文件順序不同),則鏈接的可執行文件不同!

簡而言之:如果您不能為您的構建重現環境的精確副本,您將永遠不會看到相同的可執行文件,即使源是相同的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM