1,查看某个so在Linux(Ubuntu)系统下的路径
ldconfig -p | grep xxx.so
2,查看某个 so库里有什么函数
nm -D xxx.so
或
objdump -tT xxx.so
如果输出符号T,则函数正常导出
如果输出符号U,则函数为定义
3,怎么确定头文件和库的对应关系?
rpm -qf /usr/include/pthread.h //获得包的名称
rpm -ql <包的名称> //获得包中文件的列表
例:
linux-bjpdOq:~ # rpm -qf /usr/include/securec.h
libsecurec-devel-1.1.1-004.005.x86_64
linux-bjpdOq:~ # rpm -ql libsecurec-devel-1.1.1-004.005.x86_64
/usr/include/securec.h
/usr/include/securectype.h
/usr/lib64/libsecurec.a
但是,对于系统库的文件,比如:
linux-bjpdOq:~ # rpm -qf /usr/include/dlfcn.h
glibc-headers-2.17-196.h22.x86_64
dlfcn.h是一个头文件,调用动态链接库用的,rpm -ql 查看里面全是头文件,发现没有找到库。
这时让我们回忆一下动态库的使用,库文件名为libxxx.so,除了在源码里包含头文件,我们还需要在链接这个库时用 -lxxx 参数.
因此,如果我们知道链接这个库时用的 -ldl参数,我们可以直接确定该so:
# ll /lib64/ | grep libdl
...
# nm -D /lib64/libdl-2.17.so |grep dlopen
0000000000001020 T dlopen