1.创建库的函数的源文件:vim add.c 只放add函数的文件; vim add.h 只放add函数的声明;vim test.c 是测试文件,用来调用add函数,且头文件加上#include "add.h";
2.生成目标文件夹:gcc -c add.c -fpic;
3.生成动态库:gcc add.o -shared -o libadd.so
注:libadd.so: lib是前缀,add是库名,so是后缀,代表的是动态库
4.将生成的动态库libadd复制到/lib目录下,#cp ./libadd.so /lib
5.编译:gcc test.c -ladd 加-l是连接动态库连接的是add动态库
6.执行:./a.out
动态库与静态库的区别:
1.静态库的后缀是.a 而动态库的后缀是.so
2.在编译链接的时候,对于静态库,连接器是把静态库里的函数拷贝到调用的地方,调用一次拷贝一次
对应的实验现象是:mv libadd.a ../之后,./a.out是可以执行的,
而对于动态库,链接器实在调用的地方做个”标记“,调用的时候再去动态库里进行加载!
对应的实验现象是mv libadd.so ../之后,./a.out是不可以执行的
3.链接动态库的可执行文件一般比链接静态库的可执行文件要小
4.默认的链接方式是动态链接!如果要静态链接的话,加一个参数 -static即可