連結器與載入器與執行檔格式

在Linux的共用函式庫中,將libfoo.so.1的「.1」這類soname的版本號碼調高,一般是在什麼時候?

  1. A修正了哪怕一個錯誤的時候
  2. B將函式庫的檔案移到別的目錄的時候
  3. C進行了更改函式的參數或結構體的配置等,使其與舊程式的ABI失去相容性之變更的時候
查看答案與解析

正確答案:C. 進行了更改函式的參數或結構體的配置等,使其與舊程式的ABI失去相容性之變更的時候

動態連結的程式會在執行時使用以soname指定的共用函式庫。若是保持相容性的修正,只要以相同的soname直接替換,就能反映到所有程式。另一方面,若更改了參數型別或結構體大小,舊程式就會以錯誤的前提來呼叫,因此要調高soname的號碼,視為另一個函式庫,並使其能與舊版並存。

  • A. 若是保持相容性的修正,號碼不會改變。
  • B. 放置位置與版本無關。
  • C. 正確。避免舊程式誤用新版本。
練習這個領域 前往領域頁面

連結器與載入器與執行檔格式的其他題目

  1. 在Linux上對執行檔使用ldd指令,可得知下列何者?
  2. 主要作業系統所使用的執行檔格式組合,下列何者正確?
  3. 當遞迴過深而超過堆疊的上限時,在Linux等系統上一般會發生的事,下列何者正確?
  4. 在C語言中,關於未寫初始值的區域變數與全域變數,開始使用時的值,下列何者正確?
  5. 反覆進行malloc與free後,儘管剩餘記憶體的總量足夠,卻無法一次配置大塊區域。這種現象稱為什麼?

這個領域的比較