連結器與載入器與執行檔格式
在Linux的共用函式庫中,將libfoo.so.1的「.1」這類soname的版本號碼調高,一般是在什麼時候?
- A修正了哪怕一個錯誤的時候
- B將函式庫的檔案移到別的目錄的時候
- C進行了更改函式的參數或結構體的配置等,使其與舊程式的ABI失去相容性之變更的時候
查看答案與解析
正確答案:C. 進行了更改函式的參數或結構體的配置等,使其與舊程式的ABI失去相容性之變更的時候
動態連結的程式會在執行時使用以soname指定的共用函式庫。若是保持相容性的修正,只要以相同的soname直接替換,就能反映到所有程式。另一方面,若更改了參數型別或結構體大小,舊程式就會以錯誤的前提來呼叫,因此要調高soname的號碼,視為另一個函式庫,並使其能與舊版並存。
- A. 若是保持相容性的修正,號碼不會改變。
- B. 放置位置與版本無關。
- C. 正確。避免舊程式誤用新版本。