静态库与动态库

一、库

由于版权原因,库函数的源代码一般是不可见的,但在暴露的头文件中你可以看到它对外的接口
库函数简介,使用的时候,直接引入头文件#include<>即可。

二、静态库

1.概念
程序在编译链接的时候把库的代码链接到可执行文件中,程序运行的时候就不再需要静态库。
2.特点
可执行文件中包含了库代码的一份完整拷贝,程序缺点就是被多次使用就会有多份冗余拷贝。 但是可执行文件运行速度快。

三、动态库

1.特点
程序在运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的副本,可共享代码,因此节省了很多内存

四、区别

1.静态库在编译链接时调用,动态库在运行时调用。
2.静态库在运行已经嵌入可执行文件中,所以执行速度快。
3.静态库有可能会出现多份相同代码,动态库对于多个可执行文件只有一份,节省了硬盘和磁盘空间。
4.静态库编译完之后,所有用到的函数全部链接到exe文件中,就一个光光的exe;动态库编译完之后是要有一个exe和dll同时在,才能运行。dll可以被多个程序同时使用

五、库的类型

(一) 在windows中
.dll 动态库
.lib 静态库
库即为源代码的二进制文件
(二) 在linux中
.so 动态库
.a 静态库

六、创建静态库及使用

第一步:汇编文件.s生成目标文件.o,使用-c选项。
第二步:生成静态库。
第三步:查看静态库。
第四步:使用静态库。
这里写图片描述

//生成静态库
ar -rc libmymath.a add.o sub.o mul.o div.o
ar:gnu的归档工具,rc:取代并创建。
lib和.a是库名的前缀和后缀。

//查看静态库
ar -tv libmymath.a
t:列出静态库中的文件
v:详细信息

//使用静态库
gcc main.c -L. -lmymath
-L:指定库路径
-l:指定库名,库名不包含前缀和后缀。

测试目标生成后,静态库删掉,程序依然可以运行。

七、创建动态库及使用

<code>这里写图片描述</code>

//-fPIC
表明使用地址无关码,使共享物理内存不被修改。
//-shared
表示产生共享库
//ldconfig可以进行配置,使新安装的动态库为系统所共享。然后使用ldconfig进行更新。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值