linux(动静态库)

目录:

          1.文件时间的概念

          2.动态库和静态库

          3.如何制作动静态库

--------------------------------------------------------------------------------------------------------------------------------

1.文件时间的概念

 我们现在就开始学习这三个时间分别表示了什么?????

1.Assess   : 文件最近被访问的时间

但是在较新的linux内核中,Access时间不会被立即更新,而是有我们一定的时间间隔,OS才会自动更新时间!!!

2.Modify :最近一次修改文件内容的时间

3.Change: 最近一次修改文件属性的时间

当我们修改文件内容的时候,是有可能修改文件的属性,比如:可能会更改文件的大小属性

----------------------------------------------------------------------------------------------------------------------------

Makefile与gcc会根据时间问题,来判定源文件和可执行程序谁更新,从而指导系统哪些源文件需要被重新编译!!!!

---------------------------------------------------------------------------------------------------------------------------

2.动态库和静态库

ldd  命令

C标准库是我们真正意义上,在OS上存在的文件。

 

 上面我们看到的全是动态库,那我想看看静态库呢???

 

动态库和静态库之间的差别!!!!

动态库和静态库相比,静态库本质上是把库当中的程序相关的内容直接拷贝进目标代码的,静态库是把我们所依赖的代码拷贝进你的可执行程序里

我们在C语言上代码时,除了自己写的循环,判断这些自己的代码,还会调用C语言的printf、scanf这些C语言的库,这些库函数实际在你编译时,通过链接库的方式

如果通过静态库,就把库当中对应的模块拷贝到你的可执行程序里,所以你的可执行形成体积比较大,但一旦形成你将不在依赖库

动态库它只是把你要关联的函数,关联起来在库里面,不会进行任何拷贝的行为,当你的可执行程序要执行库函数代码时,直接跳转到库当中就可以执行了

------------------------------------------------------------------------------------------------------------------------------

3.如何制作动静态库

如果我不想使用系统当中的哪些库,想自己制作一个动态库或静态库!!!

先制作一个静态库

我们在C/C++中,为什么有时候写代码的时候,有时候是 .h里放上声明,  .c/.cpp放入实现??为什么要这么设计呢???

因为我们要制作库!!! .h当中只有声明,没有实现,是方便我们制作库的

开源软件直接声明和定义放在一起,这直接不需要生成库,直接把源文件给别人了

如果我今天不想把源文件给别人,设计库来完成

库的存在一方面是方便使用还有一方面是私密(我不想把我的源文件给它,只想把库给他),将来给别人让别人用的时候,给的就是一套头文件和库文件,通过库把我们的源文件进行了封装保护。

-------------------------------------------------------------------------------------------------------------------------------

 

 add函数和sub函数各一组方法的声明和实现,我们现在怎么用呢???

 

 我们今天想看到的不仅仅是上面的这样子,如果没有库,我应该怎么编译呢???

如果我们想把我们的方法给别人用

1.提供源代码 + 头文件

2.将我们所以的 .o文件打包,形成库文件+头文件的声明

 那么我如何将所有的 .o 打包成静态库呢???

用  ar  -rc 命令

ar -tv  查看静态库

 我们静态库有了,可是静态库是二进制的,别人看不懂啊,别人怎么知道你的库文件里有什么方法!!!

 静态库我有了,别人怎么用呢???

 

所以我们会发现,我们在命令行当中想找到这个库,需要加  -L  -l这样子的选项

可是,我们之前写的C/C++语言代码,也用了库,为什么没有指明过这些项呢???

原因是因为之前的库在系统的默认路径下(/lib64,/usr/lib 、/usr/include  等)编译器是能够识别这些路径的

如果我不想带这些选项,我是不是就可以把我的头文件,和库拷贝到默认路径下。

没问题,不过严重不推荐!!!!

上面的过程也就是一般软件的安装过程

 到目前为止,别人就可以把我们打包好一个库文件+一套头文件用起来了

--------------------------------------------------------------------------------------------------------------------

我们现在来搞一搞动态库的制作了

 

 

 

解决 系统找不到我们的动态库的方法有3种

第一种就是,直接将我们的动态库拷贝到我们的系统路径下,不过不推荐

第二种,我们有一个环境变量 LD_LIBRARY_PATH (默认是没有配置的) 这个环境变量是指明我的程序启动之后库的搜索路径

 

这个环境变量我导入这个路径下了,不过下一次登入的时候,需要重新再导入!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值