動態庫載入過程

一直沒想過這個問題:C代碼裏調用標準庫的printf()函數,但是鏈接器在鏈接目標文件的時候並不會把標準庫這個動態庫鏈接進去,動態加載嘛。我們知道代碼裏的函數調用處這時應該是做一個引用即可。但是最終執行的時候怎樣才能找到這個函數的實體呢?

其實想來也很簡單:當目標文件執行到庫函數調用處,就把動態庫加載進內存,然後通過函數的符號名找到庫裏的函數指針(符號表搜索嘍),把它賦值給一個指針函數,然後把加上參數調用之。 

函數調用嘛,無非就是拿到函數的內存地址,然後用函數指針的類型轉換之,加上參數就可以了。

下邊的鏈接裏是個windows編程的加載、查找函數和調用的過程,linux應該也一樣吧,只是這個過程編譯器和鏈接器幫你做了。

http://biancheng.dnbcw.info/c/51432.html

歡迎指正!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章