Linux 动静态库

一、动静态库

1、库的理解

库其实是给我们提供方法的实现,如上面的对于printf函数的实现就是在库中实现的,而这个库也就是c标准库,本质也是文件,也有对应的路径

2、区别

      静态库是指编译链接时,把库文件的代码全部加入到可执行文件中

      动态库:在程序执行时由运行时链接文件加载库,只加载所需要的,节省空间大小

       Linux中:.so(动态库)    .a(静态库)     windows :     .dll(动态库)    .lib(静态库)

        在Linux中只会安装动态库,而静态库需要自己安装

由于gcc编译时默认使用的是动态库,完成的是动态链接,如要实现静态链接就要添加-static

3、命名规则 

  libname.so.xxx,name为c就是c库,c++就是c++库

4、 库的作用

方法的实现就在库当中,库就是将源文件(.c)经过一定的翻译,然后打包,封装然后只提供一个所需的文件,而将其他源文件隐藏

具体的软件的实现  = 头文件中的方法声明 + 库文件提供的方法实现 + 具体代码

二、动静态链接

先讲一个故事方便理解

1、动静态链接

动态链接就是当可执行程序自己完成不了时,就需要跳转到库中,执行库中的方法,执行完后再进行返回

特点:拷贝的是在哪里实现,不拷贝具体的实现方法;动态库只需要一个;可执行程序依旧依赖库;一旦缺失动态库,会影响很多的可执行程序无法正常运行

编译器使用静态库进行静态链接时,会将静态库的所有方法实现拷贝到可执行程序中,使该程序不再依赖静态库

注意点:

  1.如果我们没有静态库,但就要-static  ,是不行的

  2.如果没有动态库,但有静态库,而且gcc能找到,这个是可以的; 因为gcc默认优先动态链接,       而-static的本质就是改变优先级,使所有链接要求变为静态链接,并且只能适配一次

3.所有的链接都是静态链接和动态链接混合使用的

2、优缺点

动态库:优:因为是共享库,可以有效的节省资源(磁盘空间,内存空间,网络空间等)

              缺:一旦缺失,导致各个程序都无法运行

静态库:优:不依赖库,程序可以独立运行

              缺:体积大,比较消耗资源

3、ldd和file 指令

ldd 可以查询文件依赖的动态库    方法:ldd + 文件名

file 可以查询可执行程序是动态链接还是静态链接   方法: file 文件名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值