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

动态库, 静态库, 之间的差异

对于静态库而言, 当程序编译时会把静态库载入到程序当中去, 生成的运行包会比较大。
并且完成后静态库删除对程序不会有影响

可是动态库倒是相反的, 它不会载入程序, 库必须保留,

相关文章
相关标签/搜索