什么是库?
库是预先编译好的方法的集合
静态库的生成
- 讲所有的.c文件处理成.o文件。gcc -c max.o max.c
- 将所有的.o文件打包。ar crv libfoo.a max.o
共享库的生成
- 将所有的.c文件处理成.o文件。gcc -c max.o max.c
- 将所有的.o文件打包。gcc -shared -fPIC -o libfoo.so max.o
库的使用
参数:-l:指定库名
-L:指定路径
gcc -o main main.c -lfoo
共享库和静态库的区别
静态库在程序编译的时候就载入到了可执行程序,因此可执行程序的体积会很大。
动态库在程序编译的时候只进行标记(说明该方法在库中),因此可执行程序的体积比较小。当程序运行载入内存的时候,才去库里边找然后载入内存。
笔面试问题
- 使用什么命令可以查看某个进程使用了哪些库
使用ldd main命令
- 制作共享库时,-fPIC含义是什么
表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,所以动态载入时是通过代码拷贝的方式来满足不同的调用,而不能达到真正的代码段共享的目的