静态库动态库

1.库文件就是用来保存函数和变量的长裤,只能使用库文件里的函数或者变量,但是无法看到它的源码即无法实现,如我们C语言中的pritf scanf strcpy等函数。
2Linux下的库文件分为两种:
静态库 .a在编译时加载
动态库 .so在启动时加载
编译器优先加载动态库

他们的存放位置在根目录下的lib文件夹下与根目录下/usr/lib目录下
其中:根目录下lib存放的是系统运行时需要加载的库文件。而用户下lib目录就是存放应用程序启动或者运行需要加载的库文件

我们可以自己制作静态库
1.先将.c文件生成.o 文件 gcc -c xxx.c

2使用ar命令 加rcs (不存在就创建,存在就更新)
如 ar rcs libadd.a add.o
就生成了一个静态库文件add.a 其中lib是文件前缀名。

C语言当中自带库叫C库,c.so,c.a 在安装了gcc之后就具有的 其中printf scanf等等函数就在其中。在我们编译过程中自动连接这些库

gcc中可以使用-l选项去连接系统下的库。其中是先在usr目录下的lib目录去找,在去根目录下的lib目录下去找。
其中-L选项可以指定第三方链接库的路径

动态库的制作
gcc -shared -fPIC add.c -o libadd.so

使用动态库
gcc main.c ./libadd.so
在我们使用动态库时,需要写动态库的路径。

两种库文件的区别

1升级的难易:
在我们升级应用程序时,动态库我们只需要直接替换库文件即可。
而静态库需要先重新生成新的库,再重新进行编译。

2生成的可执行文件大小
使用静态库生成的可执行文件比动态库链接大,因为它需要把所有库文件放在一起进行编译

3编译时长
显然动态库快

4运行时长
动态库在运行时加载进来,所有动态库运行时间慢与静态库

5使用动态库难以部署,静态库易于部署

最后gcc 提供-static选项:
用于编译一个程序时,会使此程序静态编译,(把动态库函数和所依赖的任何的东西都编译进程序)
编译之后,文件会非常大,但是运行时不需要依赖任何动态库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值