連結器與載入器與執行檔格式
使用GNU連結器時,若像「gcc -lmylib main.o」這樣,將靜態函式庫寫在使用它的目的檔之前,有時會出現未定義參照的錯誤。下列關於其原因的敘述何者正確?
- A因為連結器從左到右依序處理,讀取函式庫的時點上尚未被參照的函式不會被取出
- B因為規定函式庫必須且只能寫在指令的最後一個
- C因為將函式庫寫在前面,函式庫的內容會被清除
查看答案與解析
正確答案:A. 因為連結器從左到右依序處理,讀取函式庫的時點上尚未被參照的函式不會被取出
GNU連結器依命令列上所寫的順序處理檔案,遇到靜態函式庫時,只會取出能解決「尚未找到定義的參照」的目的檔。若先寫函式庫,在那個時點main.o的參照還不存在,所以什麼都不會取出,之後再讀取main.o也不會回頭尋找。因此原則上函式庫要寫在使用它的一方之後。
- A. 正確。順序是有意義的。
- B. 函式庫可以寫多個。
- C. 函式庫的內容不會消失。