什麼是連結器(Linker)

將多個目的檔與函式庫結合,進行符號解析與重定位,產生可執行檔或共享函式庫的軟體。

日文名稱: リンカ

「連結器(Linker)」出現在3領域的18道練習題中(連結器與載入器與執行檔格式, 指令集與組合語言, 編譯器等)。

這個名詞所屬的領域: 連結器與載入器與執行檔格式

練習連結器(Linker)的題目

關於連結器的主要功能,下列何者正確?

  1. A結合多個目的檔與函式庫,將名稱對應到位址,產生執行檔
  2. B找出原始碼的語法錯誤並通知
  3. C執行中的程式使用完畢後,自動釋放其記憶體
查看答案與解析

正確答案:A. 結合多個目的檔與函式庫,將名稱對應到位址,產生執行檔

連結器會將各目的檔中所參照的名稱(符號),對應到其他地方所定義的實體(符號解析),並排列各檔案的程式碼與資料以決定最終位址,再將指令中的暫時位址改寫為正確的值(重定位)。必要時還會從函式庫中取出函式加入。如此就能產生可由作業系統載入並執行的執行檔。

關於連結器所進行的符號解析,下列說明何者正確?

  1. A將某檔案中使用的函式或變數名稱,對應到另一個檔案中的該定義
  2. B將原始碼的變數名稱換成較短的名稱,使其難以閱讀
  3. C將含有數學符號的算式重新計算成數值
查看答案與解析

正確答案:A. 將某檔案中使用的函式或變數名稱,對應到另一個檔案中的該定義

若在main.c中呼叫sum函式,並在sum.c中定義其內容,則main.o會記錄「參照sum」,sum.o會記錄「定義sum」。連結器會蒐集所有目的檔的符號表,為每個參照找出一個對應的定義。若找不到定義,就會出現「未定義的參照」錯誤;若有兩個以上,則會出現「重複定義」錯誤。

解析中的「連結器(Linker)」

出現「連結器(Linker)」的題目(18題)

  1. 關於連結器的主要功能,下列何者正確?
  2. 關於連結器所進行的符號解析,下列說明何者正確?
  3. 關於連結器所進行的重定位(relocation),下列說明何者正確?
  4. 與靜態函式庫(.a檔)一起連結時,連結器會嵌入執行檔的是下列何者?
  5. 關於連結器對弱符號(weak symbol)的處理,下列何者正確?
  6. 關於嵌入式開發中使用的連結器腳本(linker script)的功用,下列何者正確?
  7. 在RISC-V中以lui與addi兩個指令產生常數0x12345FFF時,正確的組合是下列何者?
  8. 從C語言的程式到產生執行檔的一般流程,下列何者正確?
  9. 關於編譯器從單一原始檔輸出的目的檔(.o),下列何者正確?
  10. 在a.c與b.c中都定義了未加static、同名的全域函式void init(void),然後進行連結。下列關於會發生之情形的敘述,何者正確?
  11. 在C語言中寫下「extern int count;」時,下列關於其意義的敘述何者正確?
  12. 關於靜態連結,下列說明何者正確?
  13. 關於C語言程式中作業系統最初開始執行的位址(進入點,entry point),下列何者正確?
  14. C++編譯器在函式名稱上附加參數型別等資訊以產生符號名稱的「名稱修飾(name mangling)」,其主要目的為下列何者?
  15. 對目的檔進行反組譯時,發現呼叫外部函式printf之指令的跳躍目標是0這樣的暫時值。這個值會在何時被正確填入?

相關名詞

目的檔(Object file) 重定位(Relocation) 動態連結器(Dynamic linker) 符號解析(Symbol resolution) 符號表(Symbol table) 動態連結(Dynamic linking) 靜態函式庫(Static library) 載入器(Loader) 微控制器 組譯器

前往名詞解釋列表