目录

前言:

静态库

动态库


前言:

继上文,我们从磁盘的理解,到了文件系统框架的基本搭建,再到软硬链接部分,我们开始逐渐理解了为什么运行程序需要./a.out了,这个前面的.是什么我们也知道了。

可是我们在文件权限部分,我们已经见识了最基本的库,知道了Linux的动态库的后缀是.so 静态库是.a,Windows系统的动态库是.dll,静态库是.lib。并且我们知道库的名字要去掉前缀,去掉后缀。这是我们最开始的对于库的认识。

那么我们是否是否使用过库呢?

当然是使用过的,在使用C语言C++的时候,我们使用的头文件所在的库,比如std库,我们肯定是使用过的。那么库的作用是什么呢?

在stl容器里面,都是有基本函数的接口,比如vector的push_back,我们使用的都是对应的接口,那么具体的实现在哪里呢?

具体的实现肯定是放在.cc文件,经过编译器编译成了.o文件,经过糅合起来,形成了最终的库。

现在我们就对于静态库,动态库,我们从是什么,为什么,怎么办三个方面来谈论。


静态库

为了生成静态库,我们先模仿实现多个.c文件多个.h文件:

然后在里面写入对应的代码:

#pragma once 
int Sub(int x,int y);

#include "sub.h"

int Sub(int x,int y)
{
    return x - y;
}

#include "add.h"

int Add(int x,int y)
{
    return x + y;
}

#pragma once
int Add(int x,int y);

我们创建了两个.c文件和两个.h文件。

那么我们在test.c文件里面进行测试。

#include <stdio.h>
#include "add.h"
#include "sub.h"

int main()
{
    printf("a + b = %d\n", Add(10,20));
    printf("a - b = %d\n", Sub(10,20));
    return 0;
}

如果我们直接编译的话,肯定是编不过去的,因为真正的实现是在.c里面:

那么我们不妨先生成.o文件,为了静态库做准备:

然后使用命令ar生成静态库:

其中replace 是r,c是create,如果没有就创建。

这是对于静态库的创建,libmyc.a就是我们创建的静态库,但是实际上,myc才是这个静态库的名字。

可是对于库的使用来说,比如C语言提供多个库,我们都是#include <stdio.h>的,当使用的时候,编译器会去安装好的库里面查找,所以这里面肯定存在路径问题。

使用L l选项可以解决该问题。

动态库

动态库部分后面介绍吧。

这里还涉及附加问题,后续更新。


感谢阅读!

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部