2009年8月6日 星期四

linux linker and dynamic linker

在linux下面的linker是ld
這是在編譯時 將各個object file連結成一個executable的程式

而linux下面的dynamic linker是ld.so/ld-linux.so
這是在一個程式要執行時 將程式與它所用到的dynamic share libraries連結起來並載入記憶體的程式
ld.so是用來處理a.out格式的二進位檔 ld-linux.so是用來處理ELF格式的二進位檔

從檔名可以看出來 dynamic linker是以share object的形式存在
當一個executable要開始執行時 dynamic linker 連結完executable與它用到的dynamic share libraries後 還會被map到該executable的address space中
因為ELF程式的PLT GOT機制 在程式執行中 還必須要用到dynamic linker

在Windows中的dynamic linker與linux不同 是以kernel的一部分存在
這樣做的好處是速度會快一點(不需要每個程式執行時都要將dynamic linker map到process address space中) 但是會缺少一點彈性

沒有留言:

張貼留言