C語言庫的製做

製做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

靜態庫 編譯

  1. gcc -c libc.c -o libc.o
  2. 將libc.c 編譯成二進制文件取名爲libc.o gcc

  3. ar cr libaku.a libc.o

將libc.o製做成名爲libaku.a的靜態庫 二進制

動態庫 gc

  1. gcc -c libc.c -o libc.o
  2. 將libc.c 編譯成二進制文件取名爲libc.o

  3. gcc -shared -fPIC -o libsku.so 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;
}

編譯測試程序

測試靜態庫

  1. gcc main.c -L . -laku -o maina
  2. -L指定庫路徑,-l指定庫名, 庫名爲lib後半部分,編譯測試程序取名爲main**

  3. ./maina

運行main

測試動態庫

  1. gcc main.c -L . -lsku -o mains
  2. -L指定庫路徑,-l指定庫名, 庫名爲lib後半部分,編譯測試程序取名爲main**

  3. ./mains

運行main

動態庫, 靜態庫, 之間的差異

對於靜態庫而言, 當程序編譯時會把靜態庫載入到程序當中去, 生成的運行包會比較大。
並且完成後靜態庫刪除對程序不會有影響

可是動態庫倒是相反的, 它不會載入程序, 庫必須保留,

相關文章
相關標籤/搜索