5.3.5 · HinglishBuild Systems & Toolchain

Symbol resolution — order matters

1,799 words8 min readRead in English

5.3.5 · Coding › Build Systems & Toolchain


Symbol resolution KYA hai?

Har object file ke symbol table mein do cheezein hoti hain:

  • Defined symbols (yeh .o inhe provide karta hai) — function/global yahan rehta hai.
  • Undefined symbols (yeh .o inhe chahiye) — kisi aur ko supply karna hoga.

Linker ka kaam: end tak undefined symbols ka set khaali kar dena.


Order KYU matter karta hai? (Algorithm, derive karke)

Linker teen sets maintain karta hai jab woh inputs ko left → right scan karta hai:

  1. — object files ka set jo executable mein jaayenge.
  2. — abhi ke undefined symbols ka set.
  3. mein files dwara pehle se define kiye gaye symbols ka set.

Sabse zaroori clause: archive ko sirf us ke against search kiya jaata hai jo linker ke us tak pahunchne par exist karta hai. Symbols jo baad mein undefined ban jaate hain (kyunki koi object aur right mein hai) woh abhi mein nahi the, isliye archive — jo pehle hi pass ho chuka hai — dobara kabhi nahi dekha jaata.

Consequence (woh rule jo yaad karna hai):

Objects pehle daalo, phir libraries; aur library ko us har object ke baad daalo jo use karta hai. Agar library A, library B use karti hai, toh ... A B likho (user, phir dependency).

Figure — Symbol resolution — order matters

HOW yeh kaam karta hai — worked examples


Common mistakes ko steel-man karna


Recall Feynman: ek 12-saal ke bacche ko explain karo

Socho tum ek hallway mein lockers ke aage se ek baar guzar ke school bag pack kar rahe ho, kabhi peeche nahi mudna. Jab bhi koi note milta hai "mujhe ek red pen chahiye," tum agle locker se red pen uthate ho jisme woh ho. Lekin agar tum pens se bhare locker tak pahunch jaate ho pehle koi maange bina, tum seedha aage nikal jaate ho — tum sirf wahi uthate ho jo kisi ne pehle hi maanga ho. Toh agar jis bacche ko pen chahiye woh pen locker se aage hallway mein hai, use kabhi pen nahi milega. Lesson: maangne waale ko dene waale se pehle rakho.


Flashcards

Traditional Unix linker apni command line kis direction mein scan karta hai, aur kitni baar?
Left to right, ek single pass (objects/archives ek baar process hote hain; sirf --start-group ya repeat karna re-scan force karta hai).
Linker resolution ke dauran teen sets kya maintain karta hai?
(executable mein jaane wale objects), (abhi ke undefined symbols), (pehle se define kiye gaye symbols).
Static archive .a ka koi member link mein kab pull hota hai?
Sirf agar, linker ke archive tak pahunchne ke waqt, woh member mein currently koi symbol define karta ho (undefined).
gcc -lm main.o fail kyun hota hai jabke gcc main.o -lm kaam karta hai?
Pehle -lm par, khaali hai isliye sqrt.o pull nahi hota; main.o baad mein sqrt undefined banata hai lekin libm pehle hi pass ho chuka hai. Objects libraries se pehle aane chahiye jo unhe use karte hain.
Link line par libraries rakhne ka general rule?
Objects pehle, phir libraries; har library us har object/library ke baad jo usse depend karta hai (user provider se pehle).
Do static libraries ke beech circular dependency kaise resolve karte hain?
Ek library repeat karo (-lfoo -lbar -lfoo) ya inhe -Wl,--start-group ... -Wl,--end-group mein wrap karo taaki repeated scanning force ho.
--whole-archive kya karta hai aur iske zaroorat kyun hai?
Archive ke har member ko link hone ke liye force karta hai, chahe reference ho ya na ho — tab zaroori hota hai jab kisi member ke side effects hote hain (jaise ek constructor) lekin koi referenced symbol nahi hota.
Multiple definitions ke liye strong vs weak symbol rule?
Ek strong + kai weak → strong definition silently choose hoti hai; do strong → multiple-definition error. (-fno-common tentative globals ko errors banata hai.)

Connections

  • Static vs Shared Libraries
  • The Linker (ld) and Linking Phases
  • Object File Format (ELF) and Symbol Tables
  • Name Mangling in C++
  • Build Systems & Toolchain
  • Library Constructors and __attribute__((constructor))

Concept Map

matches

must match

none found

two strong

driven by

tracks sets

archives searched vs

later symbols missed

rule

dependency form

motivated by

became

Symbol resolution

Undefined references

Exactly one definition

undefined reference error

multiple definition error

Left-to-right scan, once

E, U, D sets

Current U at arrival

Order matters

Objects first, then libraries

Library after its user

Tape performance cost

Semantic rule