[TOC]

概述

文章参考:http://man6.org/blog/Linux/%E5%AE%9E%E7%94%A8%E5%91%BD%E4%BB%A4.md

ldd - 打印共享库依赖

objdump

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看动态库有哪些符号,包括数据段、导出的函数和引用其他库的函数
objdump -tT xxx.so
objdump -x xxx.a

# 查看动态库依赖项
objdump -x xxx.so | grep "NEEDED"

# 查看动态符号表
objdump -T xxx.so
## 假如想知道 xxx.so 中是否导出了符号 yyy ,那么命令为 objdump -T xxx.so | grep "yyy" 。

# 查看动态符号表
objdump -t xxx.so
## -T 和 -t 选项在于 -T 只能查看动态符号,如库导出的函数和引用其他库的函数,而 -t 可以查看所有的符号,包括数据段的符号。

nm

1
2
3
4
5
6
7
8
9
10
# 查看静态库或动态库定义了哪些函数
nm -n --defined-only xxxx.a
nm -g -C --defined-only xxxx.so
nm -D xxxx.so

# 显示hello.a 中的未定义符号,需要和其他对象文件进行链接.
nm -u hello.o

# 在 ./ 目录下找出哪个库文件定义了close_socket函数.
nm -A ./* 2>/dev/null | grep "T close_socket"

readelf

1
2
3
4
5
# 查看静态库定义的函数
readelf -c xxx.a

# 查看静态库定义的函数
readelf -A xxx.so