Recall Static lib build aur use karne ka minimal 3-stage pipeline kya hai?
gcc -c *.c → object files. 2. ar rcs libX.a *.o → archive. 3.
gcc main.o -L. -lX -o app → link, library apne user ke baad.
Recall
.a delete karne se executable kyun nahi toot-ta?
Kyunki static linking ne build time pe zaroorat ka machine code executable mein copy kar diya tha; archive sirf ek build-time source tha.
Recall
ar rcs mein s tumhe kya deta hai?
Ek symbol index taaki linker har member scan kiye bina symbols resolve kar sake.
Recall (Feynman, ek 12-saal ke bacche ko samjhao)
Socho ek LEGO bricks ka dabba (.a). Tumhare toy ke instructions (main.o) kehte hain "mujhe ek red 2×4 brick chahiye." Builder (linker) dabba kholega, sirf wahi red 2×4 nikalega jo tumne manga, toy pe lagaega, aur dabba band kar dega. Ek baar toy ban gaya, tum dabba phek sakte ho — brick already glued on hai. Lekin builder sirf wahi bricks uthata hai jo tum pehle se maang chuke ho, isliye dabbe tak pahunche se pehle maangna padega, baad mein nahi.
Unix vs Windows pe static library ka file extension kya hota hai?
lib<name>.a (Unix) aur <name>.lib (Windows/MSVC).
Unix pe .a archive kaunsa tool banata hai?
ar (jaise ar rcs libX.a *.o).
ar rcs mein flags decode karo.
r = members insert/replace karo, c = quietly create karo, s = symbol index likho.
Library sources compile karte waqt -c kyun use karna padta hai?
Relocatable object files pe rokne ke liye (no linking, koi main entry point required nahi).
Unix link order rule batao.
Ek library unke objects/libraries ke BAAD aani chahiye jo iske symbols reference karti hain (single-pass left-to-right resolution).
gcc -lmath main.o fail kyun hota hai lekin gcc main.o -lmath kaam karta hai?
Linker sirf wahi archive members pull karta hai jo currently-undefined symbols satisfy karti hain; lib pehle hone pe kuch bhi undefined nahi hota isliye kuch liya hi nahi jaata.
Kya runtime pe static .a present honi chahiye?
Nahi — iska code link time pe executable mein copy ho jaata hai; yeh sirf ek build-time dependency hai.
nm mein T vs U ka kya matlab hai?
T = symbol defined hai (text/code mein), U = symbol undefined hai (kahin aur se chahiye).
"Archive has no index" ko kya fix karta hai?
ar rcs se re-archive karo ya ranlib libX.a chalao.
Search karte waqt -lfoo kismein expand hota hai?
-L search paths mein libfoo.a (ya libfoo.so) naam ki file mein.
GNU ld mein do static libs ke beech cyclic dependencies kaise handle karte ho?