linux下静态库和动态库的创建和使用

一》静态库的创建和使用:

 静态库的制作
1>. 命名规则
1). lib + 库的名字 + .a
2). libmytest.a
2>. 制作步骤:
1). 生成对应的.o文件 -- .c --> .o          -c
2). 将生成的.o文件打包  ar rcs + 静态库的名字(libMytest.a) + 生成的所有的.o
3>. 发布和使用静态库:
1). 发布静态库
2). 头文件

1.整体浏览下整个需要用到的目录:



看到这里,我们知道include这个目录存放的是动态库的头文件,lib目录中存放的是静态库,src目录中存放的是源码(src这个目录是自己私有的,lib和include目录打包出售),test目录就是测试了。

2:具体看看这些目录:

1)include目录:

2)src目录:

add.c

#include"head.h"


int Add(int num1,int num2)
{
	return num1+num2;
}
sub.c

#include"head.h"


int Sub(int num1,int num2)
{
	return num1-num2;
}
mul.c

#include"head.h"

int Mul(int num1, int num2)
{
	return num1 * num2;
}

div.c

#include"head.h"

int Div(int num1, int num2)
{
	assert(num2);
	return num1/num2;
}



注意:这里的-I选项是引入头文件,因为头文件不在本目录下,所以需要手动的引入头文件的目录。



将所有的目标文件打包成静态库,静态库的名字为mylib

3)lib目录:


通过ar -t可以查看libmylib.a中有几个目标文件。


4)test目录:

libatest.c

#include<stdio.h>
#include"head.h"

int main()
{
	int num1 = 20;
	int num2 = 30;

	printf("num1+num2 = %d\n",Add(num1, num2));
	printf("num1-num2 = %d\n",Sub(num1, num2));
	printf("num1*num2 = %d\n",Mul(num1, num2));
	printf("num1/num2 = %d\n",Div(num1, num2));
	
	return 0;
}


生成可执行文件libatest,需要引入头文件还需要引入静态库。

静态库的第二种使用方式:


-L表示静态库的目录,-l表示要引用那个库(注意这里的库名,把前面的lib去掉,把后面的.a弃掉)。



3.结果:



4.静态库的优点和缺点:


二》动态库的创建和使用:

共享库的制作:
1>. 命名规则:
1). lib + 名字 + .so
2>. 制作步骤:
1). 生成与位置无关的代码 (生成与位置无关的.o)
2). 将.o打包成共享库(动态库)

同样的使用上面静态库的四个目录来演示动态库的创建和使用:

1)src目录:


2)用gcc生成动态库:


-shared: 表示要生成动态库。

3)编译和运行测试程序:


方式二:(ldd:查看程序执行的时候所依赖的所有的共享库。)


解决方案一:将动态库拷贝放到/lib中。这种方式不推荐使用,有可能会覆盖系统的库。


解决方案二:将动态库的目录加入到LD_LIBRARY_PATH环境变量中,程序每次查找动态库先会到这个环境变量中所指路径中查找,

再到PATH环境变量所指的路径中查找。但是这种方式是临时的,关闭终端后,就无效了。

解决方案三:将你的动态库的绝对路径加入到~/.bashrc,关闭终端后才生效,此时是永久有效的。



解决方案四(企业中常用的方式):到/ect下找到你的动态链接器的配置文件,将动态库的绝对路径写到这个配置文件中,更新这个配置文件。



更新这个配置文件:



4)动态库的优缺点:


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值