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