C语言库的制作

耗尽温柔 提交于 2019-12-02 18:50:05

制作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语言库

静态库

  1. gcc -c libc.c -o libc.o
  2. 将libc.c 编译成二进制文件取名为libc.o

  3. ar cr libaku.a libc.o

将libc.o制作成名为libaku.a的静态库

动态库

  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

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

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!