如何知道一个共享库是否取决于另一个共享库

How to know if one shared library depends on another shared library or not?

本文关键字:共享 是否 取决于 另一个 一个 何知道      更新时间:2023-10-16

我写了一个共享库,名为" libmyssl.so",我在代码中使用了一些openssl函数,make file看起来如下:

g -v -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 。也许我不太了解。

希望有人可以对此进行更多的解释,非常感谢!

某些发行版将要求您在引用它们的对象文件之后列出链接的库(模仿静态LIB的工作方式)。因此,尝试构建:

g++ -v -shared -Wl,-soname,libmyssl.so.1,-o libmyssl.so.1.0 myssl.o -lz -lssl -lcrypto
相关文章: