(一)静态库的创建及使用:(新建目录:mkdir static,在此目录下进行操作)
1 创建主函数和两个子函数,主函数内部将会调用子函数;
2 将两个子函数打包成静态库函数;
3 编译主函数时进行链接创建好的静态库;
详细步骤:
一 创建主函数和两个子函数
1 vi add.c
int add(int a,int b)
{
return a+b;
}
2 vi max.c
int max(int a,int b)
{
return a>b?a:b;
}
3 vi staticmain.c(主函数名)
#include <stdio.h>
int add(int a,int b);
int max(int a,int b);
int main()
{
int a=10;
int b=11;
printf("a+b=%d\n",add(a,b));
printf("max=%d\n",max(a,b));
return 0;
}
二 将两个子函数打包成静态库
1 生成add.o和max.o两个目标文件
命令:gcc -c add.c && gcc -c max.c
2 将add.o和max.o这两个目标文件再次生成libmakelib.a库文件,此后编译主函数时直接静态链接makelib库
命令:ar crs libmakelib.a add.o max.o
三 使用静态库
命令:gcc staticmain.c -o staticmain -L./ -lmakelib
命令:./staticmain(运行结果正确)
(二)动态库的创建及使用(新建目录:mkdir dynamic,在此目录下进行操作)
1 创建主函数和两个子函数;主函数内部将会调用子函数;
2 将两个子函数打包成动态库函数;
3 编译主函数时进行链接创建好的动态库;
详细步骤:
一 创建主函数和两个子函数,主函数内部将会调用子函数。(主函数更名为dymain.c)
1 vi add.c
int add(int a,int b)
{
return a+b;
}
2 vi max.c
int max(int a,int b)
{
return a>b?a:b;
}
3 vi dymain.c(主函数名为dymain.c)
#include <stdio.h>
int add(int a,int b);
int max(int a,int b);
int main()
{
int a=10;
int b=11;
printf("a+b=%d\n",add(a,b));
printf("max=%d\n",max(a,b));
return 0;
}
二 将两个子函数打包成动态库函数
1 生成add.o和max.o两个目标文件
命令:gcc -c add.c && gcc -c max.c
2 将add.o和max.o这两个目标文件生成libmakelib.so库文件,此后编译主函数时直接动态链接makelib库
命令:gcc -shared -fPIC -o libmakelib.so add.o max.o
三 使用动态库
命令:gcc sharelibmain.c -o sharelibmain -L./ -lmakelib
命令:./sharelibmain(运行结果不正确,原因是没有将动态库添加到当地库中,并且在拷贝添加过程中显示权限不够)
命令:export LD_LIBRARY_PATH="/home/usrname/dynamic" (让主函数dymain.c运行时在此路径下去引用动态链接库)
命令:./sharelibmain (运行结果正确)
总结:
静态库的实现方法:在主函数编译时选择性的将静态库中需要用到的方法添加进来,形成一个新的完整的主程序代码。
动态库的实现方法:在主函数编译好之后,需要执行程序时,才去链接指定位置动态库中需要用到的方法。