加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

动态链接库的路径及依赖

发布时间:2020-12-13 22:37:19 所属栏目:百科 来源:网络整理
导读:1、依赖查询 1.1 objdump 一个 动态库还可能依赖别的动态库,可用以下命令去查询[7]: $ objdump -x libxxxxx.so | grep NEEDED 以libpng12.so.0为例,查询结果如下: liyihai@ubuntu:/lib/i386-linux-gnu$ objdump -x libpng12.so.0 | grep NEEDED NEEDED l

1、依赖查询

1.1 objdump

一个 动态库还可能依赖别的动态库,可用以下命令去查询[7]:

$ objdump -x libxxxxx.so | grep NEEDED
以libpng12.so.0为例,查询结果如下:
liyihai@ubuntu:/lib/i386-linux-gnu$ objdump -x libpng12.so.0 | grep NEEDED
  NEEDED               libz.so.1
  NEEDED               libm.so.6
  NEEDED               libc.so.6

1.2 ldd[11]

还可以直接使用ldd命令查看动态库的依赖关系:

ldd libXXX.so

2、-L、-rpath、-rpath-link

就算使用第1章的方法找到了libpng12.so.0所依赖的库,而且放到和libpng12.so.0同一个目录中,编译时还是可能找不到。使用-L可以指定可执行文件编译时需要的库目录,而动态库依赖于其它库的目录需要使用-rpath、rpath-link来指定[9]。

由于-rpath、rpath-link都是ld的参数,而不是gcc的,因此如果是gcc中使用这两个参数,要使用-Wl选项[10],例如:

$gcc  hello.c -Wl,-rpath-link /usr/local/lib

3、函数

如果知道.so中包含了那些函数呢?,以libc.so.6为例,使用以下命令可以查找其中包含的函数[1]。

$ readelf -s libc.so.6

参考资料

[1]linux下,怎么用shell命令或脚本查看.so文件里面的所有函数名

[2]linux下查看动态链接库so文件的依赖的相关组建

[4]linux下so动态库一些不为人知的秘密(中)

[6]怎么让gcc编译出来的so文件不依赖于libgcc_s.so.1?

[7]在linux下查看so的依赖库

[8]linux下如何查看共享库so版本号

[9]动态库的链接和链接选项-L,-rpath-link,-rpath

[10]ld的-rpath与-rpath-link选项

[11]linux下查看动态链接库依赖关系的命令

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读