我们在学习C语言时经常使用库函数,当时用起来是不是特别的方便呢,但是现在我们到了Linux的操作系统下,我们的一切命令都是通过指令,今天我们就来学习一下在Linux下如何建立相应的库并使用它。
一. 库的概念:
-
库就是预先编译好的方法的集合,我们常用的printf等就存在与我们的C库里面。C语言默认链接的就是C库,存放在/usr/lib目录下。
-
库我们可以分为静态库和动态库。
- 静态库:形式为:lib.xx.a ,lib为固定的前缀,xx为库名,.a为特有后缀。它的特点是编译链接时把这个函数的代码复制进来,这样在无库的情况下代码也可以运行,但同时导致了消耗内存大。
- 共享库:形式为:lib.xx.so,lib是固定前缀,xx为库名,.so为特有后缀。它的特点是编译链接时不把函数复制进来,只做个标记,在运行时才回去找,所以当库消失时则链接失败,但同时导致消耗内存小。
二. 库的制作:
- 静态库的制作:(xx为库名)
- 将所有的.c文件变为.o文件
-
ar crv libxx.a 所有.o文件//创建库 - 写个xx.h头文件,里面内容是函数的声明
- 写个mian.c,里面引用库的的头文件
-
gcc -o main main.c -L. -lxx//.L表示库当前所在的位置,-l.xx表示要找的库名 - 或者将该库移动到/usr/lib目录下:
-
su//转换为root用户 -
mv libxx.a /usr/lib//移动库到指定的目录下 - 再执行
gcc -o main main.c -lxx - 这时./main即可以运行程序
- 共享库的制作:
- 写实现函数的.c文件
- 写个xx.h头文件,里面内容是函数的声明
-
gcc -shared -fPIC -o libxx.so 所有.c文件//创建库 - 写个mian.c
-
gcc -o main main.c -L. -lxx或 gcc -o main main.c都会出错,因为它默认链接的是/usr/lib下的库,所以你必须把他移动到此目录下: -
su//转换为root用户 -
mv libxx.so /usr/lib(你可以通过ldd来查看程序执行所用到的库是否链接) - 这时./main即可以运行程序
三. 演示:
给大家说了这两种库的制作方法,有些人可能还不能完全的理解,没关系,我现在来给大家演示一下这个过程。(在这只演示静态库的办法,共享库和他的类似,只需要该指令就可以啦)
程序运行的环境是Linux环境,我们实现制作的库里面有两个函数,一个为max,一个为add,我们现在来看吧。
1.静态库的使用:
-
首先我们呢打开Linux系统,我们进入命令行窗口,先创建两个普通文件,一个add.c向里面写入求两个数之和的算法,一个max.c向里面写入两个数比较的算法,如下图所示:
-
现在我们将所有的.c文件变为.o文件,用
gcc -c add.c和gcc -c max.c -
我们对静态库起名为cy11输入建立静态库的指令
ar crv libcy11.a add.o max.o我们再写一个.h文件,将两个函数的声明写入,具体步骤如下图:
-
这样就可以让程序运行了,还有一种把库放到程序自动链接的目录下,你们记得练习实现一下哦!
加油!