openssl 怎么可能链接到与 curl 相关的其他版本的 libcrypto?在ELF格式文件中定义在哪里?
ldd openssl
给我
libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f5d78c49000)
ldd curl
给我
libcrypto.so.1.0.2 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2 (0x00007fd38571c000)
readelf --dynamic /usr/bin/curl
Dynamic section at offset 0x2fab0 contains 27 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libcurl.so.4]
0x0000000000000001 (NEEDED) Shared library: [libz.so.1]
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
没有列出libcrypto.so.1.1
。为什么?
最佳答案
我猜您正在寻找动态部分中的 NEEDED
条目。共享库的 SONAME 是在链接时记录的。
我的结果来自 Fedora 29 x86_64,因此在该平台上,两个包都是针对同一个共享库构建的。您的输出表明 openssl
来自 OpenSSL 1.1.x 包,但 curl
是针对 OpenSSL 1.0.2 构建的。
$ readelf --dynamic /usr/bin/openssl | fgrep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libssl.so.1.1]
0x0000000000000001 (NEEDED) Shared library: [libcrypto.so.1.1]
0x0000000000000001 (NEEDED) Shared library: [libz.so.1]
0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
$ readelf --dynamic /usr/bin/curl | fgrep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libcurl.so.4]
0x0000000000000001 (NEEDED) Shared library: [libmetalink.so.3]
0x0000000000000001 (NEEDED) Shared library: [libssl.so.1.1]
0x0000000000000001 (NEEDED) Shared library: [libcrypto.so.1.1]
0x0000000000000001 (NEEDED) Shared library: [libz.so.1]
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
关于linux - 链接两个不同版本的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54688999/