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。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=
相关文章
- linux 查看so库链接其他的库
- 【linux】程序找不到动态库.so的解决办法|查看.so动态库信息|.so动态库加载顺序
- Linux流量监控工具iftop查看带宽流量及使用详解
- Linux下查看进程IO工具iopp
- Linux下mysql数据库的导入与导出以及查看端口
- python基础语言-第二课1.python安装,环境搭建,本地安装,pip安装,镜像安装等,pip工具的使用,查看pip版本,安装模块(库)
- Linux下如何查看动态链接库so文件的依赖
- Linux ldconfig 查看动态库连接
- Linux 对mysql远程授权连接操作 和 查看mysql数据库和表 基本命令
- Android自学基础——使用SQLite Expert可视化工具查看数据库信息