CSAPP第七章筆記

2021-09-25 01:12:07 字數 908 閱讀 7886

第七章總結圖

注意:1.在linux系統中,生成動態庫時執行的命令:gcc -fpic -shared -o ***

其中-shared是表明在裝載時進行重定位,-fpic是表明生成位址無關**。

2.顯示使用動態庫的方法:

linux系統中:

呼叫dlopen(),dlsym(), dlerror(),dlclose()這四個函式進行動態庫的顯示呼叫

windows系統中

在windows中只需要呼叫dll檔案即可,使用loadlibrary(), getprocaddress(), freelibrary()三個函式,具體可以參考下面部落格

3.隱式使用動態庫

linux在輸入指令時加入動態庫的庫路徑,以及在程式中加入動態庫的標頭檔案

windows中隱式使用時,標頭檔案、lib檔案和dll缺一不可,lib檔案可以通過#gragma comment(lib, "***")語句在程式中新增,也可以通過配置vs的專案來新增,dll暫時知道的專案的庫目錄必須包含動態庫才可以。

4.在製作動態庫時,windows下的動態庫函式需要被呼叫,一定要加__declspec(dllexport),但是linux中使用的動態庫不需要加

5.所有的目標檔案以及靜態庫,動態庫,linux中都是elf檔案格式,windows中都是pe檔案格式。

6.動態庫和靜態庫的區別

載入的時機不一樣,動態庫是在程式執行時加入,不需要經過編譯階段,所以動態庫更改不需要重新編譯,靜態庫是在程式鏈結時加入的,所以靜態庫更改以後,需要重新編譯。

靜態庫每次更改都需要複製一次使用到的函式到記憶體中,動態庫則不需要,如果記憶體中已經存在這個函式了,那就不會複製了,可以節省空間。

CSAPP第七章筆記

講完鏈結之後,接著講載入 load 但是載入不是最重要的,而是第二重要的,其中包括了動態鏈結部分,所以這一章的主題是鏈結。作者列出了4大好處來 我們看本章 理解鏈結器將幫助你理解語言作用域規則是如何實現的 個人體會 鏈結器只關心全域性符號和static符號,不關心區域性變數,區域性變數是棧的事情 理...

第七章筆記

程序就是cpu未完成的工作 檢視程序的相關命令 ps a 關於當前環境的所有程序 x 與當前環境無關的所有程序 f 顯示程序從屬關係 e 顯示當前使用者環境中的所有程序 l 長列表顯示程序的詳細資訊 u 顯示程序的使用者資訊 ps ax o cpu,mem,user,group,comm,nice,...

Think in java第七章筆記

1.通過繼承可將乙個物件當做它自己的型別或者它自己的基礎型別對待。這種能力是非常重要的,因為多個型別 從相同的基礎類中衍生出來 可被當做同一型別對待。而且只需要一段 即可對所有不同的型別進行同樣的處理。2.將乙個方法呼叫同乙個方法主體連線到一起就稱為繫結。若一種語言實現了動態繫結,同時必須提供一些機...