静态库与动态库的区别以及优缺点,在linux环境下配置静态库与动态库

注意我们这里主要讨论在linux环境下的区别


我们大家都知道函数的库分为两种一个是静态库另一个是动态库


库文件:

                   静态库                                             共享库(动态库)

                   半成品                                              零件半成品

Linux         .a                                                        .so

Windows   .lib                                                       .dll/.DLL

使用时机    链接过程                                             运行过程(将动态库加载到磁盘中单独执行)

链接过程    将库里的东西打包到了库文件,一旦生产静态库可以没有

他们两的主要区别是在使用的时机不同:                                     

                                            

在动态库只是链接了地址一个符号,                                          静态库在链接是就进行了打包。

链接的过程再去寻找单独去加载内存中。


.o也是二进制文件的集合,相当于一个包是静态中生成的编译文件,只是查看了语法什么的错误是.c的中间文件

动态库是通过gcc生成不可单独执行的可执行文件,如果其它文件调用可以单独执行


静态库的优缺点:

优点:他编译后执行不需要外部的函数库支持,因为所有的函数都已经被编译进去了。

缺点:如果库函数改变,那就得重新编译。

动态库的优缺点:

优点:动态函数库所产生的可执行文件比较小,动态库的改变不会影响到你的程序,所以在升级会比较方便。

缺点:因为库函数没有整合进你的程序,而是程序运行时动态的申请调用,所以程序的运行环境中必须提供相应的库。


下来我们一起看看如何配置静态库与动态库

生成静态库:

gcc -c   *.c --> *.o

ar crv libxxx.a *.o-->libxxx.a

gcc -o main main.c -L(path) -lxxx  xxx是名称 path是路径

取绝对路径用=$(pwd)


生成动态库:

gcc -shared -fPIC -o libxxx.so *.c 除了main.c

gcc -o main main.c -L. -lxxx

修改环境变量LD_LIBRARY_PATH: export LD_LIBRARY_PATH=最好是绝对路径

2.将生成的动态库拷贝到默认加载路径下: /lib  /user/lib





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值