.a/.framework其实是把编译生成的.o文件,打包成一个.a/.framework文件。a的意思是archive/归档的意思。
查看静态库.a文件包含的内容用下面的命令解压:
ar x xxx.a
用ar命令打包静态库:
参数r是将后面的*.o或者*.a文件添加到目标文件中
参数c是创建
参数s是添加索引
ar -rcs 文件输出地址/xxx.a 文件索引地址1/*.o 文件索引地址2/*.o 等等
还可以将.a文件和.o文件一起打包:
ar -rcs 文件输出地址/xxx.a 文件索引地址1/*.o 文件索引地址2/*.o 等等 合并后的文件输出地址/xxxxx.a
查看.a文件的symbols(符号),用下面的命令:
nm xx.a
如果输出较多,可重定向输出至文本文件中
nm xx.a > xx.txt
会打印每个包含的文件,以及文件内的symbol
nm -g xxx.a
输出包含三个部分:
1、符号值。默认显示十六进制;
2、符号类型。小写表示是本地符号,大写表示全局符号(external);
3、符号名称。
例如:
符号的类型是以一个字母的形式显示的,小写字母表示这个符号是本地(local)的,而大写字母则表示这个符号是全局的(global,externel)。一般来说,类型有以下几种:T、D、B、U、W。
各自的含义如下:
T表示在代码段中定义的一般变量符号;
D表示时初始化过的数据段;
B表示初始化的数据段;
U表示没有定义的,在这个库里面使用了,但是在其他库中定义的符号;
W,weak的缩写,表示如果其他函数库中也有对这个符号的定义,则其他符号的定义可以覆盖这个定义;
整理不易,转载请注明,谢谢~