静态库
静态库是多个可重定位目标文件(.o)的归档集合,以 .a(archive)为后缀。
创建与使用:使用 ar 工具可以将多个 .o 文件打包成一个 .a 文件。在编译时,链接器从静态库中提取出程序实际引用的模块,将其代码合并到最终可执行文件中。
优点:程序发布时无需依赖库文件,所有代码已包含在可执行文件中;部署简单,不存在版本兼容性问题。
缺点:多个程序使用同一静态库会导致代码重复,浪费磁盘和内存空间;库更新时需要重新链接所有依赖它的程序。
链接顺序问题 ⚠️:链接器在处理静态库时采用单向扫描。如果库A引用了库B中的符号,那么在命令行中库A必须出现在库B之前。这种依赖顺序限制了模块组织方式,可以使用 -l 选项配合 --start-group 和 --end-group 来解决循环依赖。
区别:普通 .o 文件被强制全部加载,而 .a 文件仅在发现引用时才提取特定模块——这是 .o 和 .a 在链接行为上的本质区别。
链接到
- 上一个知识点:7.12 重定位计算
- 下一个知识点:7.14 共享库(动态链接)