库文件详解
1.库文件概念
库文件:预先编译好的方法集合
举例说明:例如,printf()是一个库函数,它的声明在stdio.h。
而它的实现在C库中,库又分为静态库 (libxx.a)共享库(libxx.so)(windows动态链接库)
2.看看Linux系统的头文件和库文件在哪里
我们先去根目录找到usr文件夹,里面的include文件夹中全是头文件
库文件是是头文件中方法的具体实现。库文件存放的标准目录为/usr/lib下面。
其中.a结尾的就是静态库,.so为共享库。
3.自己实现一个静态库
现在我们实现一个加法一个比大小的功能,把这两个功能写在foo.c中。
之后我们做库。
第一步:使用下面的命令先将它编译。
gcc -c foo.c
这里的foo.o文件,就是编译好的二进制文件。
第二步:好的我们现在打包成库,使用下面的命令,
ar crv libfoo.a(库名) foo.o(要打包的方法)
现在就将他们加到静态库a中,libfoo.a就是我们的静态库,如下图所示:
如何使用呢?我们将给出演示,
第三步:我们先写一个main.c程序调用我们的方法
补充:
第四步:之后使用下面的命令对其进行编译,命令如下:
gcc -o main main.c -L. -lfoo
gcc -o main main.c -L(指定库所在位置).(代表当前位置) -l(后面跟着库的名字,库名字不要加后缀)
编译成功,执行成功。
总结:静态库 程序使用静态库,编译后,用到的库方法会复制到生成的可执行程序中。可以直接运行当前程序,不需要再去链接静态库
4.共享库的用法
第一步:先将foo.c进行编译生成.o文件
gcc -c foo.c
第二步:先做一个共享库
gcc -shared -fPIC -o libfoo.so foo.o
第三步:对mian.c进行编译
gcc o main main.c -L.-lfoo
第四步:移动到/lib
MV libfoo.so /lib
第五步:直接运行./main
./main
总结:
共享库: 程序使用共享库,编译连接后,可执行程序只标记用到的库方法,并不包含。运行程序时,动态链接用到的库。