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

關於編譯器從單一原始檔輸出的目的檔(.o),下列何者正確?

  1. A是可直接在作業系統上執行的完整程式
  2. B只是將原始碼壓縮而成,不含機器碼
  3. C含有機器碼,但其他檔案中的函式與變數的位址尚未決定
查看答案與解析

正確答案:C. 含有機器碼,但其他檔案中的函式與變數的位址尚未決定

目的檔中包含該檔案內函式經翻譯後的機器碼、變數的初始值、所定義與所參照的名稱清單(符號表),以及事後要填入位址的位置清單(重定位資訊)。像printf這樣呼叫其他檔案中函式的指令,由於不知道位址,仍保留暫時的值。連結器會將多個目的檔整合起來決定位址,進而產生執行檔。

  • A. 要執行必須先經過連結。
  • B. 內容是機器碼及其附屬資訊。
  • C. 正確。位址是在連結時決定的。
練習這個領域 前往領域頁面

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

  1. 關於連結器的主要功能,下列何者正確?
  2. 關於連結器所進行的符號解析,下列說明何者正確?
  3. 關於連結器所進行的重定位(relocation),下列說明何者正確?
  4. 連結C語言程式時出現「undefined reference to `foo'」(對foo的未定義參照)錯誤,最可能的原因為下列何者?
  5. 在a.c與b.c中都定義了未加static、同名的全域函式void init(void),然後進行連結。下列關於會發生之情形的敘述,何者正確?

這個領域的比較