庫是什麼:1.通過gcc編譯器得到的
2.本質:
還是乙個檔案
這個檔案裡邊就是程式設計師編寫的**
3.為什麼要使用庫
**保密
為了部署和分發
100個原始檔-》打包成乙個庫
4.如何使用庫
要有動態庫/靜態庫
來自於.c .cpp,裡面是若干個函式的實現
需要有標頭檔案宣告原始檔中實現的函式
有標頭檔案
裡面宣告了可被呼叫 的函式名,和引數
命名規則靜態庫的製作
原始檔 ----- 預編譯 ------ 編譯 --------- 彙編 -------- 目標檔案 .o ------ 使用ar工具編號壓縮打包 ------靜態庫
# ls#ifndef _head_h
#define _head_h
int add (int a,int b);
int subtract(int a,int b);
int multiply(int a,int b);
double divide(int a,int b);
#endif
1.通過gcc得到 .o 檔案 -c
add.c div.c head.h main.c mult.c sub.c
# gcc -c add.c div.c mult.c sub.c
add.c add.o div.c div.o head.h mian.c mult.c mult.o sub.c sub.o
2.將得到的o 打包-> 使用 ar工具 (archive)
ar rcs
-r :替換
-c :建立
-s :索引
ar rcs libcalc.a add.o div.o mult.o sub.o
靜態庫的分發1.libcalc.a 2.標頭檔案:head.h
靜態庫的使用
1.根據標頭檔案中的api,編寫測試程式
2.編譯測試程式,指定靜態庫
目錄 檔案
|-----include head.h
|----lib main.c
|----src add.c div.c mult.c sub.c
#gcc -c src/*.c 直接編譯找不到標頭檔案
#gcc -c src/*.c -i ./include/ --------------- (-i)指定搜尋的檔案
gcc 指定靜態庫
- l :靜態庫的路徑
-l :靜態庫的名字:去掉lib ,去掉.a ,剩下的是名字 libcalc.a - >calc
共享-》共享記憶體中的庫
命名規則liunx : lib***x.so 和靜態庫差不多
在liunx下是乙個可執行檔案
window : lib***.dll 如果使用vs製作的 :lib***.lib lib***.dll
動態庫的製作原始檔 ----- 預編譯-e ----- 編譯 -s ----- 彙編 -c ----目標檔案 al.o ------ (-shared) ----- lib***.dll
1.使用gcc 得到 .ogcc sub.c add.c div.c mult.c -c -fpic
-fpic/-fpic: 使用相對位址記錄**位置
2.使用gcc 得到動態庫,以下兩種格式都可以gcc -shared add.o sub.o div.o mult.o -o libcalc.so
gcc -shared -o libcalc.so add.o sub.o div.o mult.o
分發:標頭檔案,動態庫使用:編寫測試檔案,對頭檔案中宣告的函式測試
include head.h
lib libcalc.a
libcalc.so
mian.c
src add.c div.c mult.c sub.c
只是保證在連線的時候沒問題
工作原理:- 靜態庫 :gcc 進行連線之後,靜態庫中的**和測試檔案**被打包到了可執行檔案中
- 動態庫:gcc進行連線之後,動態庫不會和可執行程式打包在一起
- 程式啟動之後,動態庫會被動態載入到記憶體中
- 什麼時候載入?程式需要呼叫add函式的時候,動態庫被載入到記憶體
#可以通過命令檢測是不是能載入到對應的庫檔案:
動態庫和靜態庫
本文主要解決以下幾個問題 1 為什麼要使用庫?2 庫的分類 3 建立自己的庫 或許大家對自己初學linux時的情形仍記憶尤新吧。如果沒有乙個能較好的解決依賴關係的包管理器,在linux下安裝軟體將是一件及其痛苦的工作。你裝a包時,可能會提示你要先裝b包,當你費盡心力找到b包時,可能又會提示你要先安裝...
動態庫和靜態庫
先抄一段 windows下的動態庫和靜態庫區別解釋,其實linux下意義一樣的,不過字尾名有些區別 靜態庫 在編譯的時候載入生成目標檔案,在執行時不用載入庫,在執行時對庫沒有依賴性。動態庫 在目標檔案執行時載入,手動載入,且對庫有依賴性。兩者區別 一,靜態庫的使用需要 1 包含乙個對應的標頭檔案告知...
動態庫和靜態庫
簡單的說,使用動態庫就是在鏈結的時候,不會將動態庫的 鏈結到可執行檔案中,而是採用symbol的方式。使用靜態庫,生成可執行檔案的時候,會將靜態庫的 鏈結到可執行檔案中。這樣,動態庫體積會很小,並且可以,依賴於更新的動態庫,但是,缺點是不穩定。靜態庫會更加穩定,但是體積會很大。靜態庫 就是多個目標檔...