C语言库的制作
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
制作C語言庫
編寫頭文件,在文件內(nèi)聲明要用到的函數(shù),
libh.h
#include <stdio.h> // 兩數(shù)相加 int add(int a, int b); // 絕對值 int mabs(int a);編寫c語言庫源碼文件, 在文件內(nèi)定義之前聲明的函數(shù)。
libc.c
/*兩數(shù)相加函數(shù)*/ int add(int a, int b) { return a+b; } /*一個整型數(shù)的絕對值*/ int mabs(int m) { int result = m; if (m < 0) { result = 0-m; } return result; }生成C語言庫
靜態(tài)庫
將libc.c 編譯成二進制文件取名為libc.o
ar cr libaku.a libc.o將libc.o制作成名為libaku.a的靜態(tài)庫
動態(tài)庫
將libc.c 編譯成二進制文件取名為libc.o
gcc -shared -fPIC -o libsku.so libc.o將libc.o制作成名為libsku.so的動態(tài)庫
調(diào)用C語言庫
編寫測試程序
main.c
#include "libh.h" int main(int argc, char const* argv[]) { int n = 0; scanf("%d", &n); printf("|%d| = %d\n%d + 3 = %d\n", n, mabs(n), n, add(n, 3)); return 0; }編譯測試程序
測試靜態(tài)庫
-L指定庫路徑,-l指定庫名, 庫名為lib后半部分,編譯測試程序取名為main**
./maina運行main
測試動態(tài)庫
-L指定庫路徑,-l指定庫名, 庫名為lib后半部分,編譯測試程序取名為main**
./mains運行main
動態(tài)庫, 靜態(tài)庫, 之間的差別
對于靜態(tài)庫而言, 當程序編譯時會把靜態(tài)庫載入到程序當中去, 生成的運行包會比較大。
而且完成后靜態(tài)庫刪除對程序不會有影響
但是動態(tài)庫卻是相反的, 它不會載入程序, 庫必須保留,
轉(zhuǎn)載于:https://my.oschina.net/dengwo/blog/599378
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: iPhone屏幕知识点
- 下一篇: IDEA 连接 GIT OSCHINA