制做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
动态库, 静态库, 之间的差异
对于静态库而言, 当程序编译时会把静态库载入到程序当中去, 生成的运行包会比较大。
并且完成后静态库删除对程序不会有影响
可是动态库倒是相反的, 它不会载入程序, 库必须保留,