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

與靜態函式庫(.a檔)一起連結時,連結器會嵌入執行檔的是下列何者?

  1. A函式庫中的所有目的檔
  2. B只有函式庫的檔名,不嵌入程式碼
  3. C函式庫中的目的檔裡,只有解決未定義參照所需的那些
查看答案與解析

正確答案:C. 函式庫中的目的檔裡,只有解決未定義參照所需的那些

靜態函式庫是將許多目的檔整合成一個的封存檔。連結器只會從封存檔中取出定義了尚未找到定義之符號的目的檔,並將其嵌入。因此即使是像標準函式庫這樣包含許多函式的函式庫,執行檔也只會增加所用函式的份量。

  • A. 全部放入的話,執行檔會無謂地變大。
  • B. 只記錄名稱的是動態連結。
  • C. 正確。沒用到的部分不會放入。
練習這個領域 前往領域頁面

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

  1. 使用GNU連結器時,若像「gcc -lmylib main.o」這樣,將靜態函式庫寫在使用它的目的檔之前,有時會出現未定義參照的錯誤。下列關於其原因的敘述何者正確?
  2. 關於位置獨立程式碼(PIC),下列說明何者正確?
  3. 關於共用函式庫所使用的GOT(全域偏移表,Global Offset Table)的功用,下列何者正確?
  4. 在動態連結中,使用PLT(程序連結表,Procedure Linkage Table)進行延遲繫結(lazy binding)時,下列說明何者正確?
  5. 在Linux等系統中啟動動態連結的程式時,動態連結器(ld.so等)的功用,下列何者正確?

這個領域的比較