【系统编程】动态库和静态库

一、动态库

         程序在运行时才去链接动态库的代码,多个程序共享库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。

             动态库的名字:lib开头+库名+.so  , eg:libfile.so就是一个叫file的动态库

             生成Ubuntu使用的动态库:gcc -shared -fPIC -o libfile.so file.c

             生成开发板使用的动态库:arm-linux-gcc -shared -fPIC -o libfile.so file.c

 

二、静态库

          静态库可以简单的看成一组目标文件的集合,即很多目标文件经过压缩打包后形成的文件。比如在我们日常编程中,如果需要使用printf函数,就需要包stdio.h的库文件,使用strlen时,又需要包string.h的库文件,可是如果直接把对应函数源码编译后形成的.o文件直接提供给我们,将会对我们的管理和使用上造成极大不便,于是可以使用“ar”压缩程序将这些目标文件压缩在一起,形成libx.a静态库文件。

             静态库的名字:lib开头+库名+.a  ,eg:libfile.a就是一个叫file的静态库

             生成Ubuntu使用的静态库:

                      1、先生成.o文件---> gcc -c file.c

                      2、生成静态库 ---> ar crs libfile.a file.o

             生成开发板使用的静态库:

                      1、先生成.o文件---> arm-linux-gcc -c file.c

                      2、生成静态库 ---> ar crs libfile.a file.o

 

三、使用链接库

      参数:  -L --->告诉编译器库(.so)的位置

                   -l --->告诉编译器库的名字(去掉lib,去掉后缀)
      gcc  myPro.c  -o  myPro  -lfile -L.        //libfile.a只需用file即可: -lfile
      ./myPro                                //执行程序
            

 

四、动态库和静态库的区别

            1、生成可执行文件大小:静态库生成的可执行文件比动态库大,原因是编译时使用静态库会将调用的函数源码拷贝到可执行文件,动态库不会。

            2、运行可执行程序时:动态库需要链接库,静态库不需要。

 

参考博客:

[1]https://blog.csdn.net/u012414189/article/details/84111636

[2]https://blog.csdn.net/u010665638/article/details/84562414

[3]https://blog.csdn.net/qq250941970/article/details/6199558

[4]https://blog.csdn.net/m0_37542524/article/details/83754738

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jason~shen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值