静态库和动态库

(一)静态库的创建及使用:(新建目录: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 (运行结果正确)

总结:

静态库的实现方法:在主函数编译时选择性的将静态库中需要用到的方法添加进来,形成一个新的完整的主程序代码。

动态库的实现方法:在主函数编译好之后,需要执行程序时,才去链接指定位置动态库中需要用到的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值