The .a File Is a Relic: Why Static Archives Were a Bad Idea All Along
10 months ago
- #static linking
- #C programming
- #software development
- 文章批评了静态库(.a文件)作为C语言SDK静态链接方式的固有缺陷
- 动态链接(.so文件)支持无需重新编译即可更新和安全修复,而静态链接会将依赖项打包进可执行文件
- 静态库本质上只是原始目标文件(.o)的简单归档,会导致符号冲突和二进制文件膨胀等问题
- --whole-archive等链接器选项试图缓解问题,但会引发新缺陷,例如强制包含所有目标文件
- 静态库缺乏符号可见性控制,会暴露内部函数,带来安全和逆向工程风险
- 作者提出新格式'静态捆绑对象'(.sbo),在保留静态链接优势的同时吸收动态库优点,尽管可能增加二进制体积
- 过渡到新链接格式需要工具链大规模更新和Linux发行版的广泛适配,这将是个漫长过程