静态库与动态库

Posted xiangtingshen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态库与动态库相关的知识,希望对你有一定的参考价值。

静态库复制静态库作为程序代码段的一部分,在可执行程序运行前就已经加入到执行码中,

    成为执行程序的一部分

    1.优点:将函数库中的函数本地化,寻址方便,速度快,等于字典一函数使用效率

    2.缺点:笑话系统资源较大,每个进程使用静态库都要复制一份,无端浪费内存

    3.使用场景:多用于核心程序,保证时效性,可以忽视空间

 

ar rcs libmylib.a file1.o

 

 

动态库(共享库)

  机制:共享代码(不共享数据)

  优点:节省内存(共享),易于更新(动态链接)

  缺点:相较于静态库调用速度略慢(延迟绑定机制)

  使用场景:1.对程序执行的速度要求不是特别强烈,而相对于系统资源有一定要求的场景

       2.对于更新比较频繁的程序

          1)停止运行程序

          2)使用新库覆盖旧库,保证“接口”一致

          3)重新启动程序

  重点强调:1.动态库是否加载到内存,取决于程序是否运行

       2.动态库加载到内存的位置不固定

共享库的创建比较简单,基本有两步。首先使用-fPIC或-fpic创建目标文件,PIC或
pic表示位置无关代码,然后就可以使用以下格式创建共享库了: gcc -share -Wl,-
soname,your_soname -o library_name file_list library_list

 

gcc -fPIC -c a.c
gcc -fPIC -c b.c
gcc -shared -Wl -o libmyab.so a.o b.o
加载共享库方法:
1.拷贝自己制作的共享库到/lib或者/usr/lib
2.临时设置LD_LIBRARY_PATH, export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径
3.永久设置,把export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径 设置到~/.bashrc
或者/etc/profile
4.设置/etc/ld.so.conf, 把库所在路径追加到此配置文件里

 


以上是关于静态库与动态库的主要内容,如果未能解决你的问题,请参考以下文章

静态库与动态库

C++静态库与动态库详解

动态库与静态库的区别

Linux下静态库与动态库

动态库与静态库

动态库与静态库优缺点比较