製做C語言庫 函數
編寫頭文件,在文件內聲明要用到的函數, 測試
libh.h spa
#include <stdio.h>
// 兩數相加
int add(int a, int b);
// 絕對值
int mabs(int a);
編寫c語言庫源碼文件, 在文件內定義以前聲明的函數。 code
libc.c 源碼
/*兩數相加函數*/
int add(int a, int b)
{
return a+b;
}
/*一個整型數的絕對值*/
int mabs(int m)
{
int result = m;
if (m < 0) {
result = 0-m;
}
return result;
}
生成C語言庫 io
靜態庫 編譯
將libc.c 編譯成二進制文件取名爲libc.o gcc
將libc.o製做成名爲libaku.a的靜態庫 二進制
動態庫 gc
將libc.c 編譯成二進制文件取名爲libc.o
將libc.o製做成名爲libsku.so的動態庫
調用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;
}
編譯測試程序
測試靜態庫
-L指定庫路徑,-l指定庫名, 庫名爲lib後半部分,編譯測試程序取名爲main**
運行main
測試動態庫
-L指定庫路徑,-l指定庫名, 庫名爲lib後半部分,編譯測試程序取名爲main**
運行main
動態庫, 靜態庫, 之間的差異
對於靜態庫而言, 當程序編譯時會把靜態庫載入到程序當中去, 生成的運行包會比較大。
並且完成後靜態庫刪除對程序不會有影響
可是動態庫倒是相反的, 它不會載入程序, 庫必須保留,