目录
前言:
在Linux下大部分程序进行编译时,都会接触静态库或动态库,因此动静态库在Linux下是个很重要的概念,他们都是文件,其中静态库后缀是.a,动态库后缀是.so。动静态库里保存的是函数的具体方法,他们的不同点在于链接阶段时,静态库会把方法直接拷贝到程序中,而动态库会把方法加载到内存中,并且在可执行程序中记录了动态库在内存的地址,以便在运行时能够让可执行程序从内存中定位具体方法。
一、静态库
1、静态库的概念
静态库是由.o文件打包而来的,因此库里面保存的是二进制,程序链接静态库时,会将静态库里的方法拷贝至可执行程序,所以使用静态库会导致可执行程序变大,则会占用内存和磁盘的空间,但是该可执行程序运行时不再需要链接外部的库,程序的独立性较强。
2、制作静态库的指令
静态库的命名方式必须以lib为前缀,以.a为后缀,使用指令生成静态库:
ar -rc libxxx.a xxx.o
//将xxx.o文件打包成静态库
这里.o文件可以是多个,即可以将多个.o文件打包成静态库,由于静态库存放的是函数方法,所以要先有一个.c源文件存放函数实现,以及有一个.h文件存放函数声明,代码如下:
//math.h
#pragma once
#include<stdio.h>
int Add1(int x,int y);
//math.c
#include"math.h"
int Add1(int x,int y)
{
return x+y;
}
并且在主函数中调用函数add:
//test.c
#include"math.h"
int main()
{
int sum = Add1(5,3);
printf("sum=%d\n",sum);
return 0;
}
先测试以上代码是否正确:
从结果看以上代码的逻辑没问题。
3、制作静态库
写一个makefile,便于完成静态库的制作,makefile的具体工作:生成math.c的.o文件,然后打包.o文件生成静态库文件,并且创建一个目录,将.h和.a文件打包到该目录下,这样直接将整个目录给到外部使用,.h文件主要是让用户知道该静态库有哪些方法可以被调用,类似说明书的作用。