链接到两个不同版本的库

时间:2019-02-14 11:06:55

标签: linux linker elf

openssl如何链接到与curl相关的其他版本的libcrypto?在ELF格式文件中定义的位置是什么?

$('#'+productId ).attr('src', productImage);给了我

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] 。为什么?

1 个答案:

答案 0 :(得分:0)

我想您正在动态部分中寻找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]
相关问题