История изменений
Исправление Bass, (текущая версия) :
В качестве резюме (влруг кому интересно?): эксперименты с patchelf
ни к чему толковому не привели. Всё работает для программы уровня «hello, world», но для ELF-файлов, имеющих сложные зависимости, всё далеко не так однозначно.
Проблема в том, что при замене libc.so.6
на более старый вариант необходимо заменять на более старые и прочие зависимости, а это целый ворох из libX11
, libXt
, libXp
, libXdmcp
и т. д.
В результате путь поиска libc.so.6
, конечно, меняется, но в выводе ldd
наблюдаем ошибки:
$ ldd libawt.so
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.28' not found (required by /usr/lib/i386-linux-gnu/libX11.so.6)
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.28' not found (required by /usr/lib/i386-linux-gnu/libxcb.so.1)
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.25' not found (required by /lib/i386-linux-gnu/libuuid.so.1)
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.28' not found (required by /lib/i386-linux-gnu/libuuid.so.1)
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.25' not found (required by /usr/lib/i386-linux-gnu/libbsd.so.0)
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.28' not found (required by /lib/i386-linux-gnu/librt.so.1)
linux-gate.so.1 (0xf7fc9000)
libmlib_image.so => not found
libjvm.so => not found
libXp.so.6 => /usr/lib/i386-linux-gnu/libXp.so.6 (0xf7b28000)
libXt.so.6 => /usr/lib/i386-linux-gnu/libXt.so.6 (0xf7abf000)
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf7aaa000)
libXtst.so.6 => /usr/lib/i386-linux-gnu/libXtst.so.6 (0xf7aa2000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf7954000)
libm.so.6 => /lib/i386-linux-gnu/glibc-2.24/libm.so.6 (0xf78fe000)
libdl.so.2 => /lib/i386-linux-gnu/glibc-2.24/libdl.so.2 (0xf78f8000)
libjava.so => not found
libc.so.6 => /lib/i386-linux-gnu/glibc-2.24/libc.so.6 (0xf7737000)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf7732000)
libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0xf7727000)
libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0xf770a000)
libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xf76f7000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf76c9000)
/lib/ld-linux.so.2 (0xf7fca000)
libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf76c0000)
libbsd.so.0 => /usr/lib/i386-linux-gnu/libbsd.so.0 (0xf76a1000)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf769a000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf768f000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf766c000)
Ну и при запуске, конечно, segmentation fault. Так что единственный выход – либо контейнер, либо виртуальная машина.
Исходная версия Bass, :
В качестве резюме (влруг кому интересно?): эксперименты с patchelf
ни к чему толковому не привели. Всё работает для программы уровня «hello, world», но для ELF-файлов, имеющих сложные зависимости, всё далеко не так однозначно.
Проблема в том, что при замене libc.so.6 на более старый вариант необходимо заменять на более старые и прочие зависимости, а это целый ворох из libX11
, libXt
, libXp
, libXdmcp
и т. д.
В результате путь поиска libc.so.6
, конечно, меняется, но в выводе ldd
наблюдаем ошибки:
$ ldd libawt.so
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.28' not found (required by /usr/lib/i386-linux-gnu/libX11.so.6)
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.28' not found (required by /usr/lib/i386-linux-gnu/libxcb.so.1)
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.25' not found (required by /lib/i386-linux-gnu/libuuid.so.1)
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.28' not found (required by /lib/i386-linux-gnu/libuuid.so.1)
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.25' not found (required by /usr/lib/i386-linux-gnu/libbsd.so.0)
./libawt.so: /lib/i386-linux-gnu/glibc-2.24/libc.so.6: version `GLIBC_2.28' not found (required by /lib/i386-linux-gnu/librt.so.1)
linux-gate.so.1 (0xf7fc9000)
libmlib_image.so => not found
libjvm.so => not found
libXp.so.6 => /usr/lib/i386-linux-gnu/libXp.so.6 (0xf7b28000)
libXt.so.6 => /usr/lib/i386-linux-gnu/libXt.so.6 (0xf7abf000)
libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf7aaa000)
libXtst.so.6 => /usr/lib/i386-linux-gnu/libXtst.so.6 (0xf7aa2000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf7954000)
libm.so.6 => /lib/i386-linux-gnu/glibc-2.24/libm.so.6 (0xf78fe000)
libdl.so.2 => /lib/i386-linux-gnu/glibc-2.24/libdl.so.2 (0xf78f8000)
libjava.so => not found
libc.so.6 => /lib/i386-linux-gnu/glibc-2.24/libc.so.6 (0xf7737000)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf7732000)
libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0xf7727000)
libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0xf770a000)
libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xf76f7000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf76c9000)
/lib/ld-linux.so.2 (0xf7fca000)
libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf76c0000)
libbsd.so.0 => /usr/lib/i386-linux-gnu/libbsd.so.0 (0xf76a1000)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf769a000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf768f000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf766c000)
Ну и при запуске, конечно, segmentation fault. Так что единственный выход – либо контейнер, либо виртуальная машина.