Загрузите и musl libc.so, и gcc libc.so в одном процессе?

У меня есть общая библиотека, скомпилированная с помощью 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

Это ссылка на liblso musl.

$ 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-приложение опирается на GNU libc.so, но я хочу, чтобы мой общий объект использовал musl's libc.so,

Может быть, есть способ переименовать Мусла libc.so в musl-libc.so?

2 ответа

Решение

Можно ли использовать GNU и musl libc.so в одном процессе?

Можно загрузить их обоих, да. Но результат быстро рухнет, так что это бесполезная вещь.

но я хочу, чтобы мой общий объект использовал библиотеку musl

Но почему?

В любом случае, вы никогда не получите, чтобы musl и glibc сотрудничали, вы можете либо использовать glibc для всего, либо использовать musl для всего.

Может быть, есть способ переименовать файл musc.so в musl-libc.so

Они уже названы по-разному: libc.so против libc.so.6, Наименование библиотеки не имеет значения. Тот факт, что они оба предоставляют одинаковые (противоречивые) символы, имеет значение.

Определенно, это возможно, но вам нужно будет написать свой собственный загрузчик. Это важная задача - хотя вы сможете скопировать большую ее часть из существующих загрузчиков 'musl' и 'glibc'.

Другие вопросы по тегам