У меня есть поле Ubuntu Linux на 64 бита. Недавно мне дали старый скомпилированный двоичный файл, который раньше работал на старом, сервере на пенсии, который я ДУМАЮ, было распределение Redhat с 2007 эрами.
Как Вы могли бы ожидать, двоичный файл не работает из-за несовместимостей библиотеки. Только для двоичного файла сосет и не ПРЕДНАЗНАЧЕН, чтобы быть портативным. Все же я все еще застреваю только с двоичным файлом и потребностью выполнить его. Таким образом, мой вопрос становится, как иметь дело с (болезненной) проблемой расчета, какие библиотеки двоичный файл ожидает, находя те библиотеки, и вынуждая программу использовать их. Какова надлежащая стратегия того, чтобы сделать это?
Я дам Вам определенный пример своего двоичного файла, который работает, но сразу перестал работать с сообщением об ошибке
datab2txt: relocation error: /lib64/libnss_files.so.2: symbol __rawmemchr, version GLIBC_2.2.5 not defined in file libc.so.6 with link time reference
Я интересуюсь стратегией диагностировать это, так как я ожидаю это, если я решу эту проблему (путем нахождения старой версии glibc??) может быть еще больше библиотек для разрешения.
Какова лучшая стратегия решения этого? Я предполагаю, что должен определить необходимые библиотеки (как?), найдите их и вынудите программу использовать их (как? переопределение LD_LIBRARY_PATH?)
Спасибо!
Править: использование ldd datab2txt
дает ошибку not a dynamic executable
. Uhoh.. что это означает?
Кроме того, я петлял и добрался:
% file datab2txt
datab2txt: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, for GNU/Linux 2.4.0, not stripped
Идентификация библиотек, покончили ldd
. Нахождение их является другой проблемой, но попыткой, роющей вокруг на packages.ubuntu.com
для более старых релизов Ubuntu. Затем Вы смотрите на распаковку пакетов вручную и установку общих объектов в их собственный специализированный каталог (или дерево каталогов в случае необходимости) и использование LD_LIBRARY_PATH
указать им. (Отметьте: использование apt-get
или dpkg
не будет работать, и при попытке вызвать проблему, Вы могли бы повредить свою систему. Просто не делайте.)
В теории, с помощью chroot должен добиться цели для выполнения программного обеспечения - одна из ситуаций, его разработанный для должен запустить неподдерживаемое, старое программное обеспечение с неподдерживаемым ABIs-, Вам, вероятно, будет нужно старое поле, чтобы скопировать необходимые библиотеки с, или найти и скомпилировать необходимые библиотеки самим.