内存管理(3)

总结:

         1、什么是库?

               函数等代码封装的二进制已经编译的归档。

         2、a r归档工具

         3、采用库的方式管理代码优点:

                 容易组织代码

                 复用

                保护代码版权

        4、静态库的静态的含义:

              编译好的程序运行的时候不依赖库。库作为程序的一部分编译连接。

        5、静态本质:

            就是目标文件的集合(归档)

        6、-static可选

库的规范与约定

       库命名规则:

       lib库名.a.主版本号.副版本号.批号

      库使用规则:

            -l 库名    -L库所在目录  gcc main.c -omain -l demo2 -L.


四、动态库的编译

     1、什么是动态库?(共享库)

          动态库是可以执行,静态库不能执行。但动态库没有main,不能独立执行;动态库不会连接成程序的一部分;

          程序执行的时候,必须需要动态库文件。

     2、工具

          ldd  查看程序需要调用的动态库 查看可执行文件 ELF 。

         readelf  -h 查看执行文件程序头

         nm  查看库中的函数符号

    3、动态库的编译

          1、编译  -c  -fpic(可选)  position independent code

          2 、连接 

                  -shared

     4、使用动态库

             gcc     代码       动态库文件名

             gcc     代码    -l库名  -L动态库所在路径

     标准命名规则:

        lib库名.so

        lib库名.a      -l 库名   -L  库所在路径

   

   问题:

          1、执行程序怎么加载动态库?

          2、动态库没有作为执行程序的一部分,为什么还要动态库编译连接

                 连接器需要确定函数在动态库中的位置


   动态库的加载:

          1、找到动态库

          2、加载动态库到内存

          3、映射到用户的内存空间

   系统对动态库查找规则:

          /lib

          /usr/lib

          到环境变量LD_LIBRARY_PATH 指定的路径中查找

   用例

     

    缓冲机制:

           把/lib: /usr/lib:LD_LIBRARY_PATH加载到缓冲        /sbin/ldconfig -v   刷新缓冲中so的搜索数据               


   综合应用:

         输入两个数,计算两个数的和。

         要求:输入与计算两个数的和封装成动态库来调用


   使用libdl.so库

       动态库加载的原理


       动态库中函数的查找已经封装成库libdl.so

        dlopen             dlsym         dlclose               dlerro

      例子:

    总结:

         1、编译连接动态库

         2、使用动态库

         3、怎么配置让程序调用动态库

         4、掌握某些工具的使用:nm    ldd   lddconfig          /objdump    strip去掉多余的信息.

 

     工具make的使用与makefile脚本

               背景:

                       make  编译脚本解释

                       编译脚本makefile

               make   -f    脚本文件    目标

               脚本文件

                      1、文本文件

                      2、基本构成语法:

                                基本单位目标target

                                目标名:依赖目标

                                 \t 目标指令

                                 \t 目标指令

         

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值