加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

c – 如何知道一个共享库是否依赖于另一个共享库?

发布时间:2021-01-12 08:45:35 所属栏目:Linux 来源:网络整理
导读:我写了一个名为“libmyssl.so”的共享库,我在我的代码中使用了一些openssl函数,make文件如下所示: g++ -v -shared -lz -lssl -lcrypto -Wl,-soname,libmyssl.so.1,-o libmyssl.so.1.0 myssl.o 之后,我使用ldd命令查看它是否依赖于libssl.so: ldd libmyss

我写了一个名为“libmyssl.so”的共享库,我在我的代码中使用了一些openssl函数,make文件如下所示:

g++ -v -shared -lz -lssl -lcrypto -Wl,-soname,libmyssl.so.1,-o
libmyssl.so.1.0 myssl.o

之后,我使用ldd命令查看它是否依赖于libssl.so:

ldd libmyssl.so.1.0

结果如下:

linux-vdso.so.1 =>  (0x00007fff743fe000) 
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0bc963b000) 
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0bc9276000) 
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0bc8f6f000) 
/lib64/ld-linux-x86-64.so.2 (0x00007f0bc9ea0000) 
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0bc8d59000)

它似乎不依赖于libssl.so,我是对的吗?

但是,我使用readelf -s命令查看符号如下:

readelf -s libmyssl.so.1.0

结果如下:

......
259: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND SSL_new
260: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND SSL_get_shutdown
261: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND close@GLIBC_2.2.5 (4)
262: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND d2i_X509
263: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND X509_get_pubkey
264: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND SSL_set_info_callback
265: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND gmtime_r@GLIBC_2.2.5 (4)
......

似乎X509_get_putkey没有重新定位.所以它应该依赖于libssl.so.也许我不太了解它.

希望有人可以解释更多关于这一点,非常感谢!

最佳答案 某些发行版要求您在引用它们的目标文件之后列出链接库(以模仿静态库的工作方式).所以尝试建立像:

g++ -v -shared -Wl,-o libmyssl.so.1.0 myssl.o -lz -lssl -lcrypto

(编辑:PHP编程网 - 黄冈站长网)

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

    热点阅读