1.
靜態庫與共享庫的區別
一些問題:
1)如果主機上沒有libfoo.a 那麼main程式能不能執行?
可以執行
2)如果foo庫更新了,需要將原來的main.c重新編譯生成main可執行程式
3)比使用共享庫,程式要稍微大一點
2.共享庫
共享庫在windows上叫做動態鏈結庫
一些問題:
1)如果主機沒有libfoo.so,那麼main程式是不能執行的。因為./main執行的時候才會去裝載add方法
2)如果更新了libfoo.so庫,那麼main程式
2.如果更新了libfoo.so庫,那麼main程式不需要重新編譯,直接就可以使用新庫。
3.由於庫里的方法並沒有包含在可執行程式中,所以,程式相對較小。
問題:如果庫里有兩個方法,而程式中只用到了乙個方法,那麼,在使用兩種不同庫的時候,是把兩個方法都包含在內,還是只包含使用的那個方法?
4.nm main
nm命令可以檢視程式中,變數和函式的位址。那麼這是什麼位址?邏輯位址?實體地址?
3.程序
作業系統管理程序,依靠pcb(程序控制塊)
cpu、io、記憶體由匯流排連線
計算機組成:cpu(運算器、控制器)、記憶體(儲存器)、io(輸入輸出裝置)
匯流排:位址匯流排、資料匯流排、控制匯流排
程式由指令構成
4.作業系統:管理軟硬體資源,為使用者提供乙個互動的介面。
1)序列處理 任務 == 程序
2)批處理系統 不能換程式
3)多道程式設計 如果a程式阻塞了,可以換成b程式
這個過程也是硬體發展的結果
4)分時系統
5. 記憶體:分頁、分段、段頁式、夥伴系統 1kb = 1024byte(位元組)
q:引入虛擬記憶體以後,有什麼不同?
6. printf()列印情況:
1)緩衝區放滿了
2)沒放滿,但是強制重新整理(比如加\n)
3)程式結束的時候(exit(0) _exit(0):沒有重新整理緩衝區)
7. 主函式三個引數
比如:int main(int argc,char *argv,char *envp)
{// argc:傳遞給主函式的引數個數
//argv是乙個代表引數自身的字串陣列
//envp:環境變數,由父程序傳給
靜態庫與共享庫
編寫使用靜態庫 靜態庫 共享庫 是包含了目標檔案的檔案,這些目標檔案被稱為模板或成員,是可以重用的預編譯 它們以特殊的格式和乙個表或者對映儲存在一起,這個表或者對映將符號名和儲存該符號的成員名字鏈結起來。對映加速了編譯和鏈結過程,靜態庫一般以副檔名.a 代表存檔檔案,archive 命名。為了使用庫...
靜態庫與共享庫
1.靜態庫 所有編譯器都提供一種機制,將所有相關的目標檔案模組兒打包成乙個單獨的檔案,被稱為靜態庫。它可以用作來聯結器的輸入,當聯結器構造乙個輸入的可執行檔案時,它只拷貝靜態庫裡面被應用程式引用的模組兒。在unix 系統中,靜態庫以存檔 一組連線起來的可重定位目標檔案的集合,有乙個頭部來描述成員目標...
靜態庫與共享庫
庫library 靜態庫在編譯連線時就把庫里的 提取出來放入可執行檔案中,程式執行時不再依賴庫。動態庫在編譯連線時只記錄了要用的名字在哪個庫的檔案中,執行時才庫檔案中找這個檔案中名字 函式或變數 並且訪問它 1 靜態庫 歸檔 lib a 1 生成庫 gcc c 1.c 2.c 只編譯不連線,產生.o...