第四章 靜態鏈結
鏈結 $ld
vma ( vitual memory address )
lma ( load memory address )
common 多個弱型別或者弱引用,在鏈結時劃分記憶體我們以最大記憶體為準。
兩種c++ abi 標準 window visual c++ he gnu 的gcc 標準,兩種互不相容。
為什麼靜態執行庫裡面乙個乙個目標檔案只包含乙個函式,比如libc.a 裡面printf.o 只有printf() 函式, 而strlen.o 裡面只有 .strlen() 函式?
因為 聯結器鏈結動態庫是以.o檔案也就是目標檔案(object file) 為單位的。如果乙個目標檔案中放了多個函式,比如printf.o裡面還有很多其他函式,我們在呼叫printf()時,會把所有同乙個.o檔案的函式都呼叫進去,增大了記憶體空間。因此乙個目標函式只包含乙個函式,然後呼叫哪個函式就鏈結哪個函式的目標檔案,這樣最大的減少了檔案的記憶體空間。
主要摘錄的是書籍中和我工作比較相關的內容。
讀書筆記之《程式設計師的自我修養 鏈結 裝載與庫》
ide一般將編譯和鏈結的過程一步完成,通常將這種編譯和鏈結合併到一起的過程稱為構建 build 預編譯 prepressing 處理源 中以 開頭的預編譯指令 刪除 define 展開所有巨集定義 處理條件預編譯指令,比如 if ifdef 等 處理 include 包含標頭檔案 刪除所有注釋 新增...
讀書筆記之《程式設計師的自我修養 鏈結 裝載與庫》
一 編譯和鏈結 ide一般將編譯和鏈結的過程一步完成,通常將這種編譯和鏈結合併到一起的過程稱為構建 build 預編譯 prepressing 處理源 中以 開頭的預編譯指令 刪除 define 展開所有巨集定義 處理條件預編譯指令,比如 if ifdef 等 處理 include 包含標頭檔案 刪...
裝載 鏈結與庫
第五部分 windows動態鏈結 1 dll函式和變數必須在檔案顯示是匯入還是匯出,declspec dllexport 匯出,declspec dllimport 匯入.建立dll檔案的時候.c檔案生成.dll,lib,exp檔案,然後用.lib檔案和exe中的.c檔案生成的目標檔案鏈結在一起,生...