GNU/Linux - GCC编译的静态库
使用gcc编译出的静态库文件,后缀名是".a"。
使用二进制格式打开的话,开头内容是:
二进制:
21 3C 61 72 63 68 3E 0A 2F 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31 37 36 30 35 39 36 39 39 34 20 20 30 20 20 20 20 20 30 20 20 20 20 20
字符:
!<arch>
/ 1760596994 0 0
!<arch>是 Unix/Linux 下的归档文件(archive file)的魔数(magic number),表示该文件是一个 ar(archive)格式的文件。
*静态库文件(如 .a文件)本质上就是一种 ar 归档文件,它里面打包了一个或多个目标文件(.o文件)。
*所以当你使用 ar工具去创建或查看 .a文件时,它遵循 ar 格式规范。
*文件开头固定为字符串:!<arch>\n(注意后面有一个换行符),用来标识这是一个 ar 格式的归档文件。
第二行是一个时间戳。在其他地方,尤其是 .o 文件名后面,也会有一个时间戳,表明文件的更新时间。
开头的时间是最新的,表示此ar文件的创建时间。其他的 .o 文件,就应该是编译时的时间。
所以,即使代码都是一样,编译的.o文件一样,但打包成.a文件后,由于时间戳不一样,生成的库文件二进制比较还是不同。
要查看这个时间戳对应的具体时间,可以在Linux终端中输入:
date -d @1760596994
Thu Oct 16 14:43:14 CST 2025
date -d @0
Thu Jan 1 08:00:00 CST 1970