Использование компоновщика uclibc для скомпилированного бинарного файла glibc?

У меня есть двоичный файл, который мне нужен для работы во встроенной системе, использующей uclibc, двоичный файл был скомпилирован для glibc, должно ли это работать?

Я получаю сообщение об ошибке, говорящее, что двоичный файл не существует, когда я пытаюсь его запустить, поэтому я проверил, каких библиотек не хватает.

libc6: /lib/x86_64-linux-gnu/libdl.so.2
libc6: /lib/x86_64-linux-gnu/librt.so.1
libc6: /lib/x86_64-linux-gnu/libm.so.6
libc6: /lib/x86_64-linux-gnu/libc.so.6
libc6: /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
libc6: /lib/x86_64-linux-gnu/libnsl.so.1

Я смог символически связать все это, кроме одной, с версией, которая у меня есть в моей системе (более старые версии, но я ожидаю, что это сработает, поскольку двоичному файлу не нужны эти новые версии):

libc6: /lib/x86_64-linux-gnu/libdl.so.2      --------------------- ln -s /lib/libdl-0.9.33.2.so libdl.so.2
libc6: /lib/x86_64-linux-gnu/librt.so.1      --------------------- ln -s /lib/librt-0.9.33.2.so librt.so.1
libc6: /lib/x86_64-linux-gnu/libm.so.6       --------------------- ln -s /lib/libm.so.0 libm.so.6
libc6: /lib/x86_64-linux-gnu/libc.so.6       --------------------- ln -s /lib/libc.so.0 libc.so.6 
libc6: /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 ---------------- 
libc6: /lib/x86_64-linux-gnu/libnsl.so.1     --------------------- ln -s /lib/libnsl-0.9.33.2.so libnsl.so.1

ld-linux-x86-64.so.2 не существует (ни какой-либо библиотеки, на которую я мог бы указать, например, ld-2.19.so, на которую он указывает на моем хост-компьютере), это специальный компоновщик glibc? У меня есть /lib/ld64-uClibc.so.0/ / /lib/ld64-uClibc-0.9.33.2.so, но символическая ссылка на это не имеет никакого эффекта (все еще получаю No such file or directory), это вообще правильно или мне нужно как-то встроить ld-linux-x86-64.so.2 в систему?


person Paul    schedule 09.05.2017    source источник


Ответы (1)


это должно работать?

No.

ld-linux-x86-64.so.2 не существует ... это специальный компоновщик glibc?

Да: ld-linux является частью GLIBC. Путь к нему жестко запрограммирован в двоичном файле (см. вывод readelf -l a.out).

мне нужно как-то встроить ld-linux-x86-64.so.2 в систему?

У вас есть два варианта:

  1. Пересоберите свой бинарный файл против uClibc, или
  2. Установите полный GLIBC (вам нужно не только ld-linux, вам также понадобятся libc.so.6, libdl.so.2 и т. д.)
person Employed Russian    schedule 10.05.2017