21.4. 共享程式庫 (Shared Libraries)

Contributed by Satoshi Asami , Peter Wemm , and David O'Brien 9 December 1996.

如果你增加一組 port 或是其他軟體需要的共享程式庫, 下面的規則是其版本編號所需遵守的規則。 一般來說,這個編號與軟體版本的編號沒有任何關係。

下面是三個共享程式庫編號所需要遵守的原則:

舉例來說,增加新的函式或是修正程式錯誤應該是在次編號異動, 而刪除函式或是變更函式呼叫的語法則務必異動主編號。

請務必在版本編號上遵守 主編號.次編號 (x.y) 格式。我們的 a.out 動態連結程式並不善於處理 x.y.z 形式的版本號碼。 任何在 y之後的版本號碼 (也就是第三個數字) 在決定那個程式庫要動態連結時會完全被忽略。 假如有兩個共享程式只在 ``細微'' 的版本編號有所不同, ld.so會選擇數字比較大的那一個。 也就是說:如果你編譯程式時是和 libfoo.so.3.3.3 連結,連結程式只會紀錄版本號碼 3.3, 而執行實會與任何一個檔名 libfoo.so.3.(任何大於 3 的編號).(數字最大那一個) .

Note: ld.so 也會自動選擇 ``次'' 版本編號最大的程式庫。也就是說: 會選擇程式庫 libc.so.2.2 而非 libc.so.2.0,即使在程式編譯時是跟 libc.so.2.0進行連結的。

另外,我們的 ELF 動態連結程式則完全不處理此版本編號。 然而,你仍然應該要如同我們的 Makefile 那樣地指定主要及次要版本編號,依照系統的類別做合適的處理。

對於非 port 的程式庫,我們的策略是只在不同次的正式發行版本 (release) 才變更版本編號。 另外,我們的策略是只在主要的 OS 正式版本更新時 (也就是說本版 X.0 到 (X+1).0 時) 才變更主要的共享程式庫版本。 當你變更了系統程式庫而導致需要變更版本編號時,檢查 Makefile 的 commit 紀錄。 確定一次正式發行之後的第一個會導致版本編號的改變,在 Makefile 中被確實地反映出來是 committer 的責任。