(1)庫文件:某些功能模塊的集合,項目之間代碼的共享,模塊化開發。預先編譯好的方法的集合。好比:咱們提早寫好一些數據公式的實現,將其打包成庫文件之後只需使用庫文件便可,而不須要從新編寫。linux
(2)靜態庫和動態庫(共享庫)的區別windows
靜態庫: windows .lib linux .a模塊化
靜態庫在連接過程當中使用,使用靜態庫編譯的的可執行程序包含靜態庫的內容,因此可執行文件的執行不依賴靜態庫。(靜態庫是功能的「.o」的集合)函數
動態庫: windows .dll linux .sospa
動態庫在執行過程當中使用,在執行中須要動態庫的支持,將動態庫動態加載到內存中,因此可執行文件的執行依賴動態庫。(是沒有main函數的可執行文件)操作系統
靜態庫在連接過程當中,將代碼拷貝到可執行文件當中,當它屢次被使用時就會有多份沒用的拷貝存在內存中,固然在程序文件自己中也存在重複代碼,這浪費了許多內存和磁盤空間。而動態庫在運行時才被加載到內存中,不一樣的程序能夠獲得內存中相同的動態庫的副本,這就爲咱們節省了內存空間。模塊化開發
(3)靜態庫的生成blog
3.1)將源文件編譯生成中間文件(*.o)接口
3.2)ar crv libxxx.a *.o(全部的中間文件)內存
3.3)gcc -o main main.c -L -lxxx
-L 指定靜態庫路徑 -l 指定靜態庫名稱
(1)動態庫的生成
gcc -shared -fPIC -o libxxx.so *.c
gcc -o main main.c -L -lmath
庫函數:在函數庫文件中。執行時在用戶態中。庫函數可能還會轉調系統調用函數,好比:fopen,printf 。也可能不須要,好比:strlen,strcopy
系統調用(英語:system call):指運行在用戶空間的應用程序向操做系統內核請求某些服務的調用過程。 系統調用提供了用戶程序與操做系統之間的接口。通常來講,系統調用都在內核態執行。因爲系統調用不考慮平臺差別性,由內核直接提供,於是移植性較差(幾乎無移植性)。在內核中實現。
系統調用函數觸發0x80中斷,將相應系統調用號存入eax寄存器中,陷入內核,內核開始執行中斷處理程序,在系統調用表中查找對應的系統內核函數並調用,執行完成後將數據經過eax寄存器帶到用戶空間。