Linux程式設計:一、入門(建立自己的靜態庫)
阿新 • • 發佈:2018-12-17
專案檔案最終的樹目錄,生成目標程式後,可以刪除中間檔案
note:靜態庫以lib開頭 ,比如mylib.a
靜態庫缺點:很多程式使用一個函式庫的函式時,會產生很多個副本。
共享庫.so可以解決此問題。
- 建立自己的函式,放在不同的標頭檔案中,只定義不宣告,並用gcc編譯
//addAnimal.c #include <stdio.h> void addAnimal(char *arg) { printf("add animal: %s\n", arg); } //addFlower.c #include <stdio.h> void addFlower(char *arg) { printf("add flower: %s\n", arg); }
gcc -c addAnimal.c addFlower.c,生成.o檔案,用於庫檔案的歸檔
-
建立包含所有函式宣告的標頭檔案(libmy.h)
//libmy.h void addAnimal(char *); void addFlower(char *);
用於專案的呼叫,包含此標頭檔案即可使用其中的函式
-
利用ar命令歸檔
ar crv lib.a addAnimal.o addFlower.o -
編譯目標程式並連結標頭檔案和庫目錄
//createMyWorld.c #include <stdlib.h> #include <stdio.h> #include "libmy.h" int main() { printf("start build my world:\n"); addAnimal("pig"); addFlower("rose"); exit(0); }
gcc createMyWorld.c -o createMyWorld -I./mylib/ -L./mylib -lmy
note:-I加入非標準標頭檔案路徑,-L加入非標準庫目錄, -lmy利用-l命令搜尋libmy靜態庫,注意一定不能使用libmy.a會提示找不到