一、二者区别
1、静态库是在程序执行前就加入到目标程序中去
动态库程序执行的过程动态的由目标程序去调用
2、静态库对空间要求不高,对时间要求高
动态库对时间要求不高,对空间要求高
二、库制作
同一目录下有三个文件 主:helloMain.c 头: helloMain.h功能: helloFunc.c
1、静态库的制作
静态库文件格式:libxxxx.a
a、gcc helloFunc.c -c 生成helloFunc.o文件
b、ar rcs libhellotest.a helloFunc.o 生成libhellotest.a 静态库文件
2、静态库的使用
gcc helloMain.c -lhellotest -L ./ -o a.out
直接运行a.out就可以
-l: 是制作要用的静态库,库名砍头去尾
-L:是告诉gcc编译器从-L指定的路径中去找静态库,默认是从/usr/lib或/usr/local/lib去找
3、动态库的制作
动态库文件格式:libxxxx.so
gcc -shared -fpic helloFunc.c -o libhellotest.so
-shared:是指定生成动态库
-fpic:是一个标准,编译阶段生成位置无关码
4、动态库的使用
gcc helloMain.c -lhellotest -L ./ -o a.out
此时直接运行a.out会出错,找不到库。
第一种解决方法:将生成的libhellotest.so 拷贝到 /usr/lib文件夹下,拷贝时需要加上超级用户权限
第二种解决方法: export LD_LIBRARY_PATH = “动态库文件路径”,但此时配的环境变量是临时的
可以使用shell脚本解决这个问题,步骤如下
a、vi start.sh
b、在start.sh中添加export LD_LIBRARY_PATH = “动态库文件路径”,和./a.out然后保存
c、chmod +x start.sh:给shell脚本添加可执行权限
d、./start.sh
通过以上解决方法,然后在运行a.out就可以了
使用du 命令 可以查看文件的大小 此时就可以使用du 静态库生成的文件和动态库生成的文件
静态库的文件会大一些
Linux静态库与动态库制作及使用
最新推荐文章于 2024-05-14 22:48:54 发布