9 下列何者不是連結程式(linker)尋找庫存的方式?
(A) 使用環境變數
(B) 使用-l選項指定庫存名稱
(C) 指定庫存的完整路徑
(D) 直接修改庫存原始碼

答案:登入後查看
統計: A(0), B(1), C(0), D(6), E(0) #3399856

詳解 (共 2 筆)

#7318700

【第一步:找關鍵字】

關鍵字:

  • 連結程式(linker)(負責把程式和函式庫「拼在一起」的工具)

  • 尋找庫存(library)(找函式庫的位置)

  • 不是(要找錯的)

? 這題關鍵在:
「linker 是怎麼『找』library 的?」

【第二步:白話翻譯】

這題在問:

? 「當你在編譯程式時,linker 要去哪裡找函式庫?」
? 哪一個選項 不是正常找的方法?

【第三步:解題思路】

這題在考什麼觀念?

? Linker(連結階段)如何定位函式庫

解題步驟

  1. 先理解 linker 在做什麼
    → 把你寫的程式 + 函式庫(library)組合成可執行檔

  2. 再思考「找 library 的方法」
    → 名字找?路徑找?系統設定找?

  3. 找出「不屬於找的方法」

原理與規則(生活比喻)

把 linker 想成「廚師」:

你寫的程式 = 食材
library = 調味料

廚師要做菜,就要「找到調味料」:

  • 看廚房(預設路徑)

  • 看標籤(-l)

  • 看地址(完整路徑)

? 但「改調味料的配方」不是找的方式!

【第四步:選項分析】

(A) 為什麼對?

✔ 正確

? 可以透過環境變數(environment variable)
例如:

  • LD_LIBRARY_PATH

? 告訴 linker 去哪裡找 library

(B) 為什麼對?

✔ 正確

? 使用 -l 選項

例如:

ㅤㅤ
-lm
ㅤㅤ

代表:
? 找 libm.so 或 libm.a

(C) 為什麼對?

✔ 正確

? 直接給完整路徑:

ㅤㅤ
/usr/lib/libm.so
ㅤㅤ

? linker 可以直接找到

(D) 為什麼錯?

✘ 錯誤(本題答案)

? 「修改庫存原始碼」

這是在:

  • 改 library 本身

  • 不是在「找 library」

? 完全不是 linker 的搜尋方式

【觀念補充與延伸】

核心觀念定位

? 系統程式(System Programming)
? 編譯流程(Compilation Process)重要考點

法條或定義

  • Linker(連結程式)
    將編譯後的目標檔(object files)與函式庫(library)組合成可執行檔

常見找 library 的方式

  1. 預設系統路徑(/lib、/usr/lib)

  2. 環境變數(LD_LIBRARY_PATH)

  3. 編譯選項(-L 指定路徑、-l 指定名稱)

  4. 直接寫完整路徑

觸類旁通(舉一反三)

對比概念

  • -l vs -L

    • -l:指定 library 名稱

    • -L:指定搜尋路徑

變化題型

  • 問:-lm 會找什麼檔案?
    ? libm.so 或 libm.a

【記憶口訣】

? 「找庫靠路徑與名稱,不靠修改原始碼」

【常見陷阱】

學生最容易搞混的地方

把「使用 library」和「修改 library」混在一起

心理盲點

看到「跟 library 有關」就以為都算

避坑指南

? 題目問「尋找方式」時:

只想一件事:
「怎麼找到它?」

不是:
「怎麼改它?」

0
0
#6786513
1. 題目解析 此題目主要考察連結程式(...
(共 953 字,隱藏中)
前往觀看
0
0