一、库
1、定义:库时预先编译好的方法的集合
2、分类:
(1)静态库:libxxx.a,可执行程序中包含静态库,直接运行;
(2)动态库:libxxx.so,可执行程序不包含共享库,只有在运行程序时才会链接到共享库
3.静态库和动态库的区别
(1)在使用时静态库时,链接器会找出程序所需的函数,拷贝到执行文件;==》编译时期
缺点:不利于内存分配,内存占用大
(2)在使用动态库时,动态库会在执行程序中留下一个标记,当运行程序时载入这个库==》运行时期
缺点:减少内存分配,升级方便
4、制作库
(1)静态库:ar crv libfoo.a xxx.o
(2)动态库: gcc -shared -fPIC -o libfoo.so xxx.c
-fPIC 作用于编译阶段,告诉编译器产生与位置无关的代码,其产生的代码全部使用相对地址,从而 使得共享库被加载时,在内存中的位置是不固定的
5、运用
(1)ldd : 用于查看某个程序使用的共享库的命令
(2)gcc -o main main.c -L 路径 -l 库名
LD_LIBRARY_PATH :环境变量名,用于指定查找共享库时除了默认路径之外的其他路径