linux--静态库和动态库(3)

来源:互联网 发布:proxifier linux版 编辑:程序博客网 时间:2024/06/09 21:03

静态和动态的比较

公共函数制成函数库
函数库是编译时完成的,链接成一个可执行文件。程序运行时,不用用到函数库,因为需要的函数已经拷到相应文件下。—–静态库(xxx.a)
把对一些库函数的链接载入推迟到程序运行的时期—–动态链接库(xxx.so)

区别 静态库 动态库 编译阶段 需要的代码连接进可执行程序 需要函数时,函数映射找到函数调入堆栈执行 可执行文件大小 大 小(要附带动态库) 效率 较快 慢

动态库优点(c库采用动态库)
- 进程之间资源共享(调用一个函数会先查看所有正在运行的程序,看内存是否有此函数的拷贝,有的话就共享此拷贝,没有才链接。可以节省内存)
- 程序升级简单(只需升级动态库,无需重新编译链接)
- 由程序员决定需求链接,高效

创建三个文件/*main.c*/#include <stdio.h>#include "my.h"int main(){   func();    return 0;}/*my.h*/#include <stdio.h>#include "my.h"int main(){   func();    return 0;}/*my.c*/#include <stdio.h>#include "my.h"void func(){    printf("111111111111111");}//静态库.a(编译时,一次编译,永久执行)1.gcc -c my.c -o my.o2.ar rcs libmy.a my.o3.静态库编译:#gcc main.c -lmy -L..表示当前目录查找静态库)//动态库.so(运行时,运行时才会找库)1.gcc -c my.c -o my.o2.gcc –shared –fPIC my.o –o libmy.so3.gcc test.c -lmy -L.4../out
0 0