C语言之函数库的制作与使用
C语言之函数库的制作与使用
函数库制作与使用是学习编程最基本的技能,今天我们就学习一下静态函数库和动态函数库的制作。
Linux 操作系统支持的库函数分为:静态库和动态库,他们的区别如下:
静态函数库是程序编译时加载到程序中,使用库的程序可独立运行,不受任何影响。
动态函数库在程序编译时不会加载到程序中,需要在程序运行的时候链接到库,因此使用库的程序不可独立运行。
具体区别:
静态库 | 动态库 | |
---|---|---|
命名格式 | libxx.a | libxx.so |
加载方式 | 编译时 | 运行时 |
优点 | 无依赖,可独立运行 | 可执行程序比较小 |
缺点 | 可执行程序会比较大 | 需要依赖,无法独立运行 |
制作及使用方法
静态库:
制作流程:
1.生成目标文件:gcc -c file.c -o file.o
2.创建静态函数库:ar -cr libfile.a file.o
-c:create
-r:replace
当插入的模块 file.o 已经存在 libfile.a 中,则覆盖,反之 ar 显示一个 错误消息
3.查看静态库文件:ar -t libknown.a 显示静态库包含的模块
使用流程:
静态库的编译:gcc -o main main.c -L. -l file
编译后 main.c 就会把静态函数库整合进 main
-L 指定静态函数库的位置
“.”表示在当前目录
-l 指定了静态数据库名
静态数据库格式是 libxxxx.a,编译时将其中 lib 和 a 都省略掉。
动态库
制作流程:
1.生成目标文件:gcc -c file.c -o file.o
2.创建动态函数库:gcc -shared -fpic -o libfile.so file.o
-fpic : 产生位置无关代码
-shared:生成共享库
使用流程:
动态库的编译:gcc -o main main.c -L. -lfile
解释如上
注意:
此时还不能立即运行程序,因为动态库在使用时默认会查找 /usr/lib 和 /lib 目录下的动态函数库,此时我们生成的库还不在里面。
解决办法:
一、把 libfile.so 放进目录中即可
二、修改环境变量
增加:export LD_LIBRARY_PATH=/位置:
查看:echo $LD_LIBRARY_PATH
三、修改配置脚本
/etc/ld.so.conf
该配置脚本存放的是连接器和加载器搜索共享库时检查的目录,默认是 /usr/lib 和 /lib 的,在其中增加你自己的库的路径。
最后,完成了以上任一解决办法,最好重新运行一下 /sbin/ldconffig脚本,以防找不到动态库