动态库载入过程
一直沒想過這個問題:C代碼里調用標準庫的printf()函數,但是鏈接器在鏈接目標文件的時候并不會把標準庫這個動態庫鏈接進去,動態加載嘛。我們知道代碼里的函數調用處這時應該是做一個引用即可。但是最終執行的時候怎樣才能找到這個函數的實體呢?
其實想來也很簡單:當目標文件執行到庫函數調用處,就把動態庫加載進內存,然后通過函數的符號名找到庫里的函數指針(符號表搜索嘍),把它賦值給一個指針函數,然后把加上參數調用之。?
函數調用嘛,無非就是拿到函數的內存地址,然后用函數指針的類型轉換之,加上參數就可以了。
下邊的鏈接里是個windows編程的加載、查找函數和調用的過程,linux應該也一樣吧,只是這個過程編譯器和鏈接器幫你做了。
http://biancheng.dnbcw.info/c/51432.html
歡迎指正!
?
轉載于:https://blog.51cto.com/wilburwoo/607095
總結
- 上一篇: MySQL5日期类型DATETIME和T
- 下一篇: 【android】【转】class an