linux下静态库和动态库的创建和使用
来源:互联网 发布:淮南大数据公司 编辑:程序博客网 时间:2024/04/30 09:03
一》静态库的创建和使用:
静态库的制作
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;}
静态库的第二种使用方式:
-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)动态库的优缺点:
- Linux下静态库、动态库的创建和使用
- Linux下静态库、动态库的创建和使用
- linux下动态/静态库的创建和使用
- [转载] linux下创建和使用静态和动态库
- Linux下创建和使用静态和动态库
- Linux下静态库,动态库的创建和使用,多个动态库使用
- Linux下的动态和静态库的创建
- linux 下静态库和动态库的创建,编译,和使用
- Linux下静态库和动态库的创建和使用( 转载 )
- linux下静态库和动态库的创建和使用
- Linux下静态库和动态库的创建和使用
- Linux下静态库和动态库的创建和使用
- linux下静态库和动态库的创建和使用
- linux下静态库和动态库的创建
- linux下静态库和动态库的创建
- Linux静态库和动态库的创建与使用
- Linux静态/动态链接库的创建和使用
- Linux静态/动态链接库的创建和使用
- [LeetCode] 268. Missing Number
- Linux网卡驱动(3)-网卡驱动深层分析
- Oracle12c安装记录(centos6.5,命令行)
- org.hibernate.exception.SQLGrammarException: could not execute batch
- 10 个非常有用的 SVG 动画的 JavaScript 库
- linux下静态库和动态库的创建和使用
- oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等)
- Android中Context详解 ---- 你所不知道的Context
- XPATH CSS PATH CHEAT SHEET
- 负数的二进制处理
- 父类私有变量是否被子类继承详细解说(答案:内存中存在,但sun公司定义为不继承)
- Java设置session超时(失效)的三种方式
- UVA 507 Jill Rides Again
- crontab 重定向错误日志 加上时间