静态库和动态库简介
1.静态库
特点:通过牺牲空间而换来了效率,占用更大的存储空间而有更高的效率
使用流程:
1)将.c文件生成.o文件
gcc -c + c文件 + -o + o文件
2)使用ar工具制作静态库
ar rcs libxxxxx.a + 静态库材料(静态库的命名规则是固定的)
3)编译静态库到可执行文件中
gcc + c文件 + 静态库名 + -o + 可执行文件名
2.动态库
特点:动态库加载到内存后,动态库中的函数有地址了,引用的动态库函数才有地址
1)将.c文件生成.o文件
gcc -c + c文件 + -o + o文件 + -fPIC
2)使用gcc制作动态库
gcc -shared -o + libxxxxx.so + 动态库材料(动态库的命名规则是固定的)
3)编译可执行程序时,指定所使用的动态库
gcc + c文件 -o + 可执行文件名+ -l +动态库名 + -L + 库路径
附:链接器:工作于链接阶段,工作时需要-l和-L提供动态库路径
动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置
运行出错解决方法:[1] 写入环境变量:export LD_LIBRARY_PATH= + 动态库路径(绝对路径)
[2] 写入终端配置文件:vi ~/.bashrc → 更改LD_LIBRARY_PATH → sourse ~/.bashrc
[3] 将库移动到/lib目录下:sudo cp + 动态库名 + /lib
3.其他
- 动态库是否加载到内存,取决于程序是否运行。
- 动态库每次加载的位置不固定。
- 动态库和静态库共存的时候,编译器默认使用动态库。