ar [-X32_64] [-]p[mod [relpos] [count]] archive [member...]
-c create创建归档
-t table显示归档中的成员文件名
-v view显示详细处理过程
-d delete删除归档中的成员文件
-x extract提取成员文件 不带文件名,默认提取全部
-u update 更新改变的
-r insert 插入文件
#静态库打包
ar -cru libCommon.a *.o
#解包
ar -x libCommon.a
#查看文件
ar -t libCommon.a
ar -tv libCommon.a
#从libCommon.a中删除udp.o 文件
ar -dv libCommon.a udp.o
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
nm
1、"-A",列出符号名的时候同时显示来自于哪个文件。
这在同时列出多个文件(比如一个链接库)的符号时比较有用
2、"-a",列出所有符号
这将会把调试符号也列出来。默认状态下调试符号不会被列出。
3、"-l",列出符号在源代码中对应的行号
指定这个参数后,nm将利用调试信息找出文件名以及符号的行号。对于一个已定义符号,将会找出这个符号定义的行号,对于未定义符号,显示为空
4、"-n",根据符号的地址来排序
默认是按符号名称的字母顺序排序的
5、"-u",只列出未定义符号
同"--undefined-only", 而"--defined-only"将只列出已定义符号
#产看函数列表
nm libCommon.a |grep -E ' T|\.o'
#查看动态库列表
nm -D libCommon.so
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
ranlib libXX.a
重新生成静态库索引符号表表
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
ldd
ldd不是一个可执行程序,而只是一个shell脚本
2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下: LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、 LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的 dependency,而程序并不真正执行。要不你可以在shell终端测试一下,如下:
(1) export LD_TRACE_LOADED_OBJECTS=1
(2) 再执行任何的程序,如ls等,看看程序的运行结果
3、ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。我们知道, ld-linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显 示可执行模块的dependency。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
相关文章
- 安卓查看本地sqlite数据库的好用工具
- Linux 对mysql远程授权连接操作 和 查看mysql数据库和表 基本命令
- C#使用 SQLite 数据库 开发的配置过程及基本操作类,实例程序:工商银行贵金属行情查看小工具
- linux日常管理-free查看内存工具
- linux中对象文件的符号表symbols查看工具nm简介
- mysql 开发进阶篇系列 36 工具篇mysqlshow(数据库对象查看工具)
- Linux下链接数据库图形化工具
- SQLite数据库查看工具(免费)
- 在Linux下面使用Mysql的客户端工具WorkBench创建数据库和用户并连接
- 您使用什么调试工具来查看STL容器的内容(在Linux上)