制作C语言库
编写头文件,在文件内声明要用到的函数,
libh.h
#include <stdio.h>
// 两数相加
int add(int a, int b);
// 绝对值
int mabs(int a);
编写c语言库源码文件, 在文件内定义之前声明的函数。
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语言库
静态库
- gcc -c libc.c -o libc.o
将libc.c 编译成二进制文件取名为libc.o
ar cr libaku.a libc.o将libc.o制作成名为libaku.a的静态库
动态库
- gcc -c libc.c -o libc.o
将libc.c 编译成二进制文件取名为libc.o
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;
}
编译测试程序
测试静态库
- gcc main.c -L . -laku -o maina
-L指定库路径,-l指定库名, 库名为lib后半部分,编译测试程序取名为main**
./maina运行main
测试动态库
- gcc main.c -L . -lsku -o mains
-L指定库路径,-l指定库名, 库名为lib后半部分,编译测试程序取名为main**
./mains运行main
动态库, 静态库, 之间的差别
对于静态库而言, 当程序编译时会把静态库载入到程序当中去, 生成的运行包会比较大。
而且完成后静态库删除对程序不会有影响
但是动态库却是相反的, 它不会载入程序, 库必须保留,