程式設計師的自我修養第七章讀書筆記 動態鏈結2

2021-08-14 06:35:40 字數 973 閱讀 3499

支援動態鏈結的系統都支援一種更加靈活的模組載入方式,叫做顯示執行時鏈結(explicit run-time linking),有時也叫執行時載入。也就是讓程式自己在執行時控制載入指定的模組,並且可以在不需要該模組時將其解除安裝。一般的共享物件不需要進行任何修改就可以進行執行時裝載,這種共享物件往往被叫做動態裝載庫(dynamic loading library),其實本質上它跟一般的共享物件沒什麼區別,只是程式開發者使用它的角度不同。

在linux 中,從檔案本身的格式上來看,動態庫實際上跟一般的共享物件沒有區別。主要的區別是共享物件是由動態鏈結器在程式啟動之前負責裝載和鏈結的,這一系列步驟都由動態鏈結器在程式啟動之前負責裝載和鏈結的,這一系列步驟都由動態鏈結器自動完成,對於程式本身是透明的;而動態庫的裝載是通過一系列由動態鏈結庫提供的api,具體的講有4個函式:開啟動態庫(dlopen)、查詢符號(dlsym)、錯誤處理(dlerror)以及關閉動態庫(dlclose),程式可以通過這幾個api對動態庫進行操作。這幾個api的實現是在/lib/libdl.so.2裡面,他們的宣告和相關常量被定義在系統標準庫檔案

開啟乙個動態庫,並將其載入到程序的位址空間,以完成初始化過程。

dlsym函式基本上是執行時裝載的核心部分,我們可以通過這個函式找到所需要的符號。

每次我們呼叫dlopen()、dlsym()或者dlclose()以後,我們都可以通過dlerror()函式來判斷上一次呼叫是否成功。dlerror()的返回值型別是char *,如果返回null,則表示上一次呼叫成功;如果不是,則返回相應的錯誤訊息。

dlclose()的作用跟dlopen()剛好相反,它的作用的是將乙個已經載入的模組解除安裝。

裝載時重定位和位址無關**是解決絕對位址引用問題的兩個方法,裝載時重定位的缺點是無法共享**,但是他的執行速度較快;而位址無關**的缺點是執行速度較慢,但它可以實現**段在各個程序之間的共享。

程式設計師的自我修養 讀書筆記

第一部分 溫故而知新 第一章 介紹基本的背景知識 作業系統 執行緒 硬體 1 關於c語言中的hello world這些問題你都清楚嗎?2 計算機硬體裝置的三個核心部件 1 處理器cpu 2 記憶體 3 i o控制晶元 4 作業系統的功能 1 提供抽象介面。2 管理硬體資源 5 多道程式 分時系統 多...

《程式設計師的自我修養》讀書筆記

1 最佳實踐 作為一名程式設計師,你也需要嘗試去理解那些軟體領域最本質的東西,而我的建議就是學習那些最佳實踐。最佳實踐 bestpractice 是乙個管理學概念,即 可使結果最優,並減少出錯可能性的某種技術或方法。最佳實踐一定是要經受住實踐檢驗才得出的。學習本質 是 以慢打快 的策略,但這種策略短...

程式設計師的自我修養 讀書筆記

哦,笑吧,科廷,老夥計。這是上帝,或者也可以說是命運或自然,跟我們開的乙個玩笑。不過,不管這傢伙是誰或是什麼,他真幽默,哈哈!霍華德,碧血沙金 專業主義不但象徵著榮譽與驕傲,而且明確意味著責任與義務。假如不小心在程式中寫了乙個bug,以致於公司損失10萬,對於非專業人士來說,只會聳聳肩 狀況總是難免...