标签 · 版本脚本
1 篇文章,记录每一次探索。
[链接器的世界-原理篇13] ABI 演进:库升级了,旧程序怎么办
2026-10-04
结构体加了一个字段,没有重新编译的旧程序照样能加载,算出来的数却错了。动态链接只按名字和版本配对,不看类型和布局。本文从这个故障出发,讲 ABI 和 API 的区别、哪些改动会破坏 ABI;libtool 的 current:revision:age 怎样变成 soname 和文件名,Debian 的包名为什么带 soname;符号版本在实践中怎么用:版本节点继承、同一个函数的新旧两个实现、glibc 的 memcpy 和 fmemopen、在新系统上编译的程序为什么到旧系统上报 GLIBC_2.34 not found 以及怎样用旧 sysroot 解决;最后用 abidiff 和 abi-compliance-checker 在发布前查出被改坏的 ABI。实验统一在 x86-64 Linux 原生执行,以 glibc 2.43 和隔离解包的 glibc 2.17 对照。
阅读全文