静态库和动态库

1.何为库

      库文件是预先编译好的方法的集合。

  在windows系统下,静态库的扩展名为:.lib        动态库的扩展名为:.DLL

  在Linu系统下,静态库的扩展名为:.a,      动态库的名称为:.so

 2.特点

       静态库:在链接的过程中,连接器从库文件中取得所需的代码,复制到生成的可执行文件中。因此,静态库在程序的链接阶段被复制到程序中,和程序的执行过程没有关系。

       动态库:动态库在链接阶段并没有被加载到程序当中,而程序在运行时被系统动态加载到内存当中供程序使用。

3.创建方式

      静态库的创建方式:

         eg:有两个源文件:main.c ,max.c

             1)gcc -c main.c  max.c (得到main.o 和max.o)

             2)使用ar将目标文件归档

                 ar crv libxxx.a  main.o  max.o;

            即libxxx.a为我们创建的静态库

     动态库的创建方式:

        eg:有一个源文件 max.c  

              1)gcc -fPIC _shared -o libxx.so max.c

            上行代码等价于:gcc -c -fPIC max.o

                                        gcc -shared -o libxx.so max.o

             即libxx.so 为生成的共享库;

4.库的使用

参数:-l:指定库名

          -L:指定路径

gcc -o main main.c -lfoo

5.区别

     静态库的可执行文件包含了库代码的一份完整拷贝,因此,当它被多次使用时就会有多分没用的拷贝在内存中,比较占内存

    动态库系统只需要载入一次,不同的程序可以得到内存当中相同的动态库副本,因此节省很多内存。

6.笔面试问题

1.使用什么命令可以查看某个进程使用了哪些库
          使用ldd main命令

2.制作共享库时,-fPIC含义是什么
       表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,所以动态载入时是通过代码拷贝的方式来满足不同的调用,而不能达到真正的代码段共享的目的
 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值