我有一个用 musl libc 编译的共享库
$ readelf -d ./libinterop_d.so
Dynamic section at offset 0x8ecb0 contains 22 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libc.so]
0x000000000000000f (RPATH) Library rpath: [/usr/local/musl/lib]
0x000000000000000c (INIT) 0x46350
0x000000000000000d (FINI) 0x7664a
0x0000000000000019 (INIT_ARRAY) 0x28e700
0x000000000000001b (INIT_ARRAYSZ) 64 (bytes)
0x000000000000001a (FINI_ARRAY) 0x28e740
0x000000000000001c (FINI_ARRAYSZ) 16 (bytes)
0x0000000000000004 (HASH) 0x158
0x0000000000000005 (STRTAB) 0xc940
0x0000000000000006 (SYMTAB) 0x2bc0
0x000000000000000a (STRSZ) 203286 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000003 (PLTGOT) 0x28f000
0x0000000000000002 (PLTRELSZ) 28056 (bytes)
0x0000000000000014 (PLTREL) RELA
0x0000000000000017 (JMPREL) 0x3f5b8
0x0000000000000007 (RELA) 0x3e358
0x0000000000000008 (RELASZ) 4704 (bytes)
0x0000000000000009 (RELAENT) 24 (bytes)
0x000000006ffffff9 (RELACOUNT) 46
0x0000000000000000 (NULL) 0x0
它链接到 musl 的 libc.so
$ ldd ./libinterop_d.so
linux-vdso.so.1 => (0x00007fff566c9000)
libc.so => /usr/local/musl/lib/libc.so (0x00007f111398c000)
现在我在将此共享对象加载到java应用程序中时遇到问题。
但如果我恢复 GNU 的链接libc.so
, 有用。
是否可以在同一个进程中同时拥有 GNU 和 musl libc.so?
java应用程序依赖于GNUlibc.so
,但我希望我的共享对象使用 musl 的libc.so
.
也许有一种方法可以重命名 musl'slibc.so
to musl-libc.so
?
是否可以在同一个进程中同时拥有 GNU 和 musl libc.so?
可以同时加载它们,是的。但结果很快就会崩溃,所以这样做是没有用的。
但我希望我的共享对象使用 musl 的 libc.so
But why?
无论如何,你永远不会让 musl 和 glibc 合作,你的选择是要么使用 glibc 完成所有事情,要么使用 musl 完成所有事情。
也许有办法将 musl 的 libc.so 重命名为 musl-libc.so
他们是already命名不同:libc.so
vs. libc.so.6
。库的命名并不重要。事实上,它们都提供相同的(矛盾的) 符号才是重要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)