补充说明
ranlib 属于 GNU binutils,作用是为 .a 静态库建立符号索引(archive index),让链接器能快速定位符号。现代 ar 在创建或修改归档时通常会自动维护索引,因此单独运行 ranlib 的场景已经不多,但在使用老旧构建脚本或手工拼装归档时仍会遇到。
索引记录每个全局符号定义在哪个成员目标文件中,链接时 ld 读取它来解析引用。如果归档被低层工具修改而没有更新索引,链接器可能报 undefined reference;此时运行一次 ranlib 或 ar s 即可修复。
GNU 工具链支持可重现构建:-D 让索引与时间戳无关,-U 恢复依赖时间的传统行为。默认模式由编译时的配置决定,发行版通常默认 -D。注意 ranlib 只处理归档,对 .so 动态库无效。
语法
ranlib [选项] 静态库文件...
选项
-D:确定性模式,索引不包含时间戳等易变信息-U:非确定性模式,恢复传统行为-v:显示版本信息--help:显示帮助
实例
# 为一个静态库重建符号索引
ranlib libfoo.a
# 等价的 ar 写法
ar s libfoo.a
# 查看归档中包含哪些目标文件
ar t libfoo.a
# 确认索引中的符号
nm -s libfoo.a | head -n 20
# 可重现构建中显式使用确定性模式
ranlib -D libfoo.a