linux下的程序如许多命令(ls 、echo、cd)要实现他们的功能,需要许多函数,在这些程序的源码中,这些函数的来源可以有两种,一种是自己编写,另一种是通过调用别人已经写好的函数,自己在编写程序的时候如果有别人已经写好的函数,直接调用这些函数会提高自己的工作效率,何乐而不为呢。
[root@M2_test_192.168.8.93_61618_A code]# vim lib.h
void bill(char *);
既然是我们要调用别人已经写好的函数,我们先要了解一下这些函数在哪里,如何调用它们了。linux中人们把预先编译好的函数集合起来,这些函数都是按照可重用的原则编写的,用来执行某项常见任务的,比如屏幕处理函数集合(curses集合),说专业点,人们把这样的函数集合叫函数库。标准的系统库文件一般都存储在/lib和/usr/lib目录中,你可以通过ls 命令查看到这些目录下有很多后缀为.so 或则.a的文件,这些文件就是为我们提供函数的。
linux 中的函数库分有两种:静态库和共享库。可以从库文件的后缀区分它们,后缀为.a的代表静态库,以.so为后缀的代表共享库。为了了解关于库,我们下面创建一个静态库,然后在程序中使用它。
一、静态库
1.建立一个fred.c的文件在里面我们写入如下代码:
[root@M2_test_192.168.8.93_61618_A code]# vim fred.c
#include <stdio.h>
void fred(int arg){
printf("fred:you passed %d \n",arg);
}
#include <stdio.h>
void fred(int arg){
printf("fred:you passed %d \n",arg);
}
2.再建立一个bill.c的文件,在里面也写入一些代码
[root@M2_test_192.168.8.93_61618_A code]# vim bill.c
#include <stdio.h>
void bill(char *arg){
printf("bill:you passed %s \n",arg);
}
#include <stdio.h>
void bill(char *arg){
printf("bill:you passed %s \n",arg);
}
然后分别编译这两个函数,产生要包含在库文件中的目标文件
[root@M2_test_192.168.8.93_61618_A code]# gcc -c bill.c fred.c
这里gcc通过-c选项来阻止编译器创建一个完整的程序,如果试图创建一个完整的程序将不会成功,因为我们还为定义main函数
下面我们开始编写一个调用bill函数的程序。首先,为我们的库文件创建一个头文件,这个头文件将声明我们的库文件中的函数,它应该被所希望使用我们库文件的应用程序所包含。
3.创建lib.h头文件:
void bill(char *);
void fred(int);

本文深入探讨了Linux程序中库的使用,包括静态库(.a文件)和共享库(.so文件)。通过实例展示了创建静态库的过程,并解释了静态库和共享库的区别,如内存占用和依赖性。动态装入器ld.so在程序运行时解析共享库,并依赖于/etc/ld.so.conf和/etc/ld.so.cache文件。最后,介绍了如何通过LD_LIBRARY_PATH环境变量来调整库的搜索路径。
最低0.47元/天 解锁文章
937

被折叠的 条评论
为什么被折叠?



