9 下列何者不是連結程式(linker)尋找庫存的方式?
(A) 使用環境變數
(B) 使用-l選項指定庫存名稱
(C) 指定庫存的完整路徑
(D) 直接修改庫存原始碼
統計: A(0), B(1), C(0), D(6), E(0) #3399856
詳解 (共 2 筆)
【第一步:找關鍵字】
關鍵字:
-
連結程式(linker)(負責把程式和函式庫「拼在一起」的工具)
-
尋找庫存(library)(找函式庫的位置)
-
不是(要找錯的)
? 這題關鍵在:
「linker 是怎麼『找』library 的?」
【第二步:白話翻譯】
這題在問:
? 「當你在編譯程式時,linker 要去哪裡找函式庫?」
? 哪一個選項 不是正常找的方法?
【第三步:解題思路】
這題在考什麼觀念?
? Linker(連結階段)如何定位函式庫
解題步驟
-
先理解 linker 在做什麼
→ 把你寫的程式 + 函式庫(library)組合成可執行檔 -
再思考「找 library 的方法」
→ 名字找?路徑找?系統設定找? -
找出「不屬於找的方法」
原理與規則(生活比喻)
把 linker 想成「廚師」:
你寫的程式 = 食材
library = 調味料
廚師要做菜,就要「找到調味料」:
-
看廚房(預設路徑)
-
看標籤(-l)
-
看地址(完整路徑)
? 但「改調味料的配方」不是找的方式!
【第四步:選項分析】
(A) 為什麼對?
✔ 正確
? 可以透過環境變數(environment variable)
例如:
-
LD_LIBRARY_PATH
? 告訴 linker 去哪裡找 library
(B) 為什麼對?
✔ 正確
? 使用 -l 選項
例如:
代表:
? 找 libm.so 或 libm.a
(C) 為什麼對?
✔ 正確
? 直接給完整路徑:
? linker 可以直接找到
(D) 為什麼錯?
✘ 錯誤(本題答案)
? 「修改庫存原始碼」
這是在:
-
改 library 本身
-
不是在「找 library」
? 完全不是 linker 的搜尋方式
【觀念補充與延伸】
核心觀念定位
? 系統程式(System Programming)
? 編譯流程(Compilation Process)重要考點
法條或定義
-
Linker(連結程式):
將編譯後的目標檔(object files)與函式庫(library)組合成可執行檔
常見找 library 的方式
-
預設系統路徑(/lib、/usr/lib)
-
環境變數(LD_LIBRARY_PATH)
-
編譯選項(-L 指定路徑、-l 指定名稱)
-
直接寫完整路徑
觸類旁通(舉一反三)
對比概念
-
-l vs -L
-
-l:指定 library 名稱
-
-L:指定搜尋路徑
-
變化題型
-
問:-lm 會找什麼檔案?
? libm.so 或 libm.a
【記憶口訣】
? 「找庫靠路徑與名稱,不靠修改原始碼」
【常見陷阱】
學生最容易搞混的地方
把「使用 library」和「修改 library」混在一起
心理盲點
看到「跟 library 有關」就以為都算
避坑指南
? 題目問「尋找方式」時:
只想一件事:
「怎麼找到它?」
不是:
「怎麼改它?」