Foundationপ্রথম নীতি থেকে
LEVEL 3 · Assembly Language

Linker

লিংকার

একাধিক object file আর library জুড়ে সব undefined symbol resolve করে একটা executable বা shared library বানায় — static (কোড embed) বা dynamic (runtime dependency) দুইভাবে।

কাজ: symbol resolution। প্রতিটা .o-এর undefined symbol (nm-এ U) খুঁজে বের করে কোথায় সংজ্ঞায়িত, সেই relocation entry পূরণ করা।

gcc main.o square.o -o prog   # ld চালায় ভেতরে — main.o-এর U square,
                                # square.o-তে খুঁজে পায়, ঠিকানা বসায়

“Undefined reference to X” error মানেই linker কোথাও X-এর সংজ্ঞা খুঁজে পায়নি — একটা .o/library বাদ পড়েছে link কমান্ডে।

Static বনাম dynamic:

StaticDynamic
Library codeexecutable-এ কপিরেফারেন্স মাত্র
আকারবড়ছোট
Runtime dependencyনেইআছে (.so)

Static library (.a, ar দিয়ে বানানো) থেকে linker শুধু দরকারি member .o টানে — সরাসরি .o দিলে সবটা যায়, কিন্তু library-র ভেতরের member selective। তাই library সবসময় সেই ফাইলের পরে রাখতে হয় যা তার symbol ব্যবহার করে (gcc main.o -lfoo, উল্টো না)।

Dynamic linking-এ resolution তিন স্তরে ভাগ হতে পারে — link time (static), load time ([[loader]] চলার সময়), অথবা run time (lazy binding, PLT/GOT দিয়ে প্রথম call-এই resolve, বাকিতে না)।