Frequently Asked Questions for FreeBSD 2.X : 其它各式各樣的問題 : 為甚麼要用(甚麼是) a.out 和 ELF 執行檔格式?
Previous: 為甚麼 FreeBSD 用的 swap 空間比 Linux 多?
Next: 好吧, 但為甚麼會有這麼多種不同的格式?

12.2. 為甚麼要用(甚麼是) a.out 和 ELF 執行檔格式?

要了解為甚麼 FreeBSD 使用 a.out 格式, 首先你要知道一些 目前 Unix 中使用最廣泛的三種格式:

FreeBSD 來自 "古典" 陣營, 傳統上都使用 a.out 格式, 這是在好幾代的 BSD 中證明可靠的計術. 雖然可以在 FreeBSD 上可以建立以及執行原生的 ELF 執行檔( 以及核心), 剛開始 FreeBSD 反對轉換到以 ELF 做為預設的 格式. 為甚麼? 嗯. 當 Linux 開始痛苦地轉換至 ELF, 並非因為 要逃離 a.out 格式, 而是因為他們沒有彈性的, 以跳躍表為基礎 的共享程式庫機制. 那是一種非常難以使用, 發展者不喜歡的東西. 既 然已經存在的 ELF 工具提供了共享程式庫的解決方案, 而且看來 是 "前衛的方法", 所需的代價就可接受因而轉換.

在 FreeBSD 的狀況中, 我們的共享程式庫機制更接近 SunOS 的 型式, 也就是, 易於使用. 然而, 從 3.0 開始, FreeBSD 正式支援 ELF 為預設格式. 即使 a.out 格式仍然非常好, 我們編譯工具的撰寫者, GNU 的成員, 已中止了對, a.out 格式的支援. 這迫使我們維護另一份版本的 compiler 和 linker, 也使得我們不能從最新的 GNU 發展成果中獲得 好處. 此外對 ISO-C++ 的需求, 尤其是建構者和解構者, 也帶動未來 版本中對 ELF 的原生支援.


Frequently Asked Questions for FreeBSD 2.X : 其它各式各樣的問題 : 為甚麼要用(甚麼是) a.out 和 ELF 執行檔格式?
Previous: 為甚麼 FreeBSD 用的 swap 空間比 Linux 多?
Next: 好吧, 但為甚麼會有這麼多種不同的格式?