首先,问大家一个问题。
问:大家在C语言中必定会用到的一个函数printf(),那么你知道这个方法的实现在哪里吗?
答:就在C的库文件当中。
问:那么C的库文件在我们Linux系统中又放在哪里呢?
答:在/lib里面。
了解到这些问题,我们再来深度的了解一下库函数。
问:库文件里存放这什么?
答:库文件里面存放了很多编译好的方法,我们可以引用对应的头文件去获取这些方法。
问:头文件里有什么?
答:这些方法的声明。
在我们编写程序的时候,在引用头文件有两种引用方法:
#include
#incldue"xxxxx.h"
引用<>的头文件,系统会在/usr/lib/include中查找。
引用“”的头文件,系统会在当前位置查找。
通俗一点说,你用的系统写的方法会在/usr/lib/include中查找,你用你自己写的方法会在当前位置查找。
当然,你也可以把自己写的方法拷贝到/usr/lib/include中,这样你也可以通过<>查找你写的函数。
库文件分为:静态库和共享库。
静态库形式大概是libxxx.a
共享库形式大概是libxxx.so
那么这两种库有什么不同呢?
首先我们来看静态库。
在我们编译链接过程中,我们main.exe文件中其实包含了mian.o和所调用的libxx.a静态库中的方法还有一些其他的库函数。此时,我们把libxx.a删除,并不会影响main执行,因为以及把libxx.a中的函数拷贝到main中了。
我们再看共享库。
和静态库的很明显的区别在于,在链接过程中,main程序中会标记libxx.so中的函数,在main执行的时候,会去寻找共享库。如果此时我们把libxx.so删除,就会直接崩掉。因为找不到共享库,就没办法执行共享库中的方法。
在我们编译main程序时,我们要用到的命令是:
gcc -o main main.c -L(...) -l(...)
其中L后面跟着库的路径,l 后面跟着库的名字
如果库存放在标准目录底下,那么-L可以省略。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)