Есть устройство на arm с предустановленной glibc 2.28. Пытаюсь собрать программу с использованием SDL2, у которой множество зависимостей. Все зависимости установлены в /mnt/SDCARD/miyoo/lib/custom
и нормально подватываются при установке LD_LIBRARY_PATH
, однако, среди этих зависимостей есть libsystemd, которая требует glibc версии не ниже 2.30. glibc нужной версии так же есть в /mnt/SDCARD/miyoo/lib/custom, но libsystemd как будто ее не видит. Пробовал как уже готовые версии glibc, поставляемые через различные пакеты apt для armhf, так и собранную вручную, но ничего не помогает:
./test: /lib/libc.so.6:
version `GLIBC_2.30' not found (required by /mnt/SDCARD/miyoo/lib/custom/libsystemd.so.0)
Пробовал даже вручную прописать RUNPATH
в libsystemd, вот так:
Dynamic section at offset 0x7a000 contains 37 entries:
Tag Type Name/Value
0x0000001d (RUNPATH) Library runpath: [/mnt/SDCARD/miyoo/lib/custom/]
0x00000001 (NEEDED) Shared library: [librt.so.1]
0x00000001 (NEEDED) Shared library: [liblzma.so.5]
0x00000001 (NEEDED) Shared library: [libzstd.so.1]
0x00000001 (NEEDED) Shared library: [liblz4.so.1]
0x00000001 (NEEDED) Shared library: [libgcrypt.so.20]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x00000001 (NEEDED) Shared library: [ld-linux-armhf.so.3]
0x0000000e (SONAME) Library soname: [libsystemd.so.0]
Но и это не помогло. С самим компилятором все нормально, hello world на целевом устройстве отрабатывает как надо. glibc тоже собрана, вроде, правильно. Конфигурировал вот такой командой:
CC=arm-linux-gnueabihf-gcc ../configure arm-linux-gnueabi --target=arm-linux-gnueabihf --with-float=hard --prefix=/usr/lib/arm-linux-gnueabihf/ --with-headers=/usr/arm-linux-gnueabihf/include:/usr/include --disable-werror
И вот еще вывод objdump -f для моей либы:
libc.so.6: file format elf32-little
architecture: UNKNOWN!, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x0001ac39
и для предустановленной 2.28:
libc-2.28.so: file format elf32-little
architecture: UNKNOWN!, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x0001785c
И лог при LD_DEBUG=all:
893: file=libc.so.6 [0]; needed by ./test [0] --- вот так ищет libc.so.6
893: find library=libc.so.6 [0]; searching
893: search path=/mnt/SDCARD/miyoo/lib/custom (LD_LIBRARY_PATH)
893: trying file=/mnt/SDCARD/miyoo/lib/custom/libc.so.6
893: search path=/lib/tls/v7l/neon/vfp:/lib/tls/v7l/neon:/lib/tls/v7l/vfp:/lib/tls/v7l:/lib/tls/neon/vfp:/lib/tls/neon:/lib/tls/vfp:/lib/tls:/lib/v7l/neon/vfp:/lib/v7l/neon:/lib/v7l/vfp:/lib/v7l:/lib/neon/vfp:/lib/neon:/lib/vfp:/lib (system search path)
893: trying file=/lib/tls/v7l/neon/vfp/libc.so.6
893: trying file=/lib/tls/v7l/neon/libc.so.6
893: trying file=/lib/tls/v7l/vfp/libc.so.6
893: trying file=/lib/tls/v7l/libc.so.6
893: trying file=/lib/tls/neon/vfp/libc.so.6
893: trying file=/lib/tls/neon/libc.so.6
893: trying file=/lib/tls/vfp/libc.so.6
893: trying file=/lib/tls/libc.so.6
893: trying file=/lib/v7l/neon/vfp/libc.so.6
893: trying file=/lib/v7l/neon/libc.so.6
893: trying file=/lib/v7l/vfp/libc.so.6
893: trying file=/lib/v7l/libc.so.6
893: trying file=/lib/neon/vfp/libc.so.6
893: trying file=/lib/neon/libc.so.6
893: trying file=/lib/vfp/libc.so.6
893: trying file=/lib/libc.so.6
893: file=libasound.so.2 [0]; needed by /mnt/SDCARD/miyoo/lib/custom/libSDL2-2.0.so.0 [0] --- вот так ищет любую другую либу
893: find library=libasound.so.2 [0]; searching
893: search path=/mnt/SDCARD/miyoo/lib/custom (LD_LIBRARY_PATH)
893: trying file=/mnt/SDCARD/miyoo/lib/custom/libasound.so.2
В чем может быть проблема? Как проверить, правильно ли собрана моя glibc, если она никак не хочет подхватываться?