静态库:复制静态库作为程序代码段的一部分,在可执行程序运行前就已经加入到执行码中,
成为执行程序的一部分
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.cgcc -fPIC -c b.cgcc -shared -Wl -o libmyab.so a.o b.o加载共享库方法:1.拷贝自己制作的共享库到/lib或者/usr/lib2.临时设置LD_LIBRARY_PATH, export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径3.永久设置,把export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径 设置到∼/.bashrc或者/etc/profile4.设置/etc/ld.so.conf, 把库所在路径追加到此配置文件里