У меня есть 32-разрядное приложение (называемое uclsyn), которое я получил от профессора астрономии. Мне удалось запустить его на CentOS год назад, но теперь, когда я настраиваю новую виртуальную машину CentOS, она не будет работать, и я не могу понять, почему. Он продолжает возвращаться с "убитым".
Это обмен в командной строке:
$ ./uclsyn_linux
Killed
$ ldd ./uclsyn_linux
not a dynamic executable
$ file ./uclsyn_linux
uclsyn_linux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
На машине, которая работает, «ldd ./uclsyn_linux» возвращает полный список зависимостей. Я нашел пакеты, которые предоставляют эти общие библиотеки, и все они, кажется, установлены.
Требуются пакеты
- libSM-1.1.0-7.1.el6.i686
- libX11-1.3-2.el6.i686
- libgcc-4.4.6-3.el6.i386
- GLibC-2.12-1.47.el6_2.9.i686
- libuuid-2.17.2-12.4.el6.i686
- libXau-1.0.5-1.el6.i686
- Есть также куча библиотек, локальных для приложения, которые я проверил и уже установил.
Моя среда
CentOS работает под VirtualBox
uname -a
: Linux localhost.localdomain 2.6.32-358.el6.i686 # 1 SMP Чт 21 февраля 12:50:49 UTC 2013 i686 i686 i386 GNU / Linux
strace ./uclsyn
выводит? Это может дать нам подсказку о том, чего не хватает в первую очередь.strace
программа не была правильно связана.Ответы:
У меня просто была проблема с 32-битным двоичным файлом, решение было:
apt-get install gcc-multilib
источник
Ошибка здесь была из-за нехватки ОЗУ на VirtualMachine. Запуск
strace ./programname
показал, что программа была убита в момент запуска перед загрузкой любой из библиотек. Увеличение объема доступной оперативной памяти гарантировало работоспособность программы.Полезные ответы
Были некоторые полезные ответы от других, а именно @slm, который предоставил полезные команды для проверки существования каждой из библиотек, и @lgeorget, который предложил попробовать
strace
команду.источник
Можете ли вы опубликовать некоторые библиотеки, на которые он ссылается (из исходной системы)? Возможно, вам просто нужно установить некоторые недостающие библиотеки.
Обычно в системе CentOS просто нужно запустить команду yum, например:
Вы можете работать в обратном направлении от исходной системы следующим образом:
В этом выходе вы можете увидеть , где моя копия
/bin/ls
набирает общий .so библиотеки, например , скажем,librt.so.1
, что случается, находится здесь:/lib64/librt.so.1
.Зная это, в исходной системе вы можете запустить эту команду, чтобы выяснить, какой пакет предоставляет эту библиотеку:
Итак, посылка называется
glibc-2.13-2.x86_64
. Итак, чтобы установить его, вы должны сделать это:источник
yum install <package>
те пакеты, на которые вы ссылались в своем вопросе?Ответ на ваш вопрос: вы пытаетесь запустить приложение, которое было скомпилировано для GNU / Linux год назад, и вы пытаетесь запустить его с новыми библиотеками, которые могут быть несовместимы или недоступны.
На данный момент у вас есть два варианта. Если вы можете перекомпилировать его (что я сомневаюсь, если я хорошо понимаю ваш случай), он запустится, потому что он будет перекомпонован с совместимыми библиотеками. В противном случае вы можете попытаться создать своего рода песочницу, например, виртуальную машину, работающую со старой версией библиотек GNU, для запуска приложения.
источник
file
. И сообщения вродеNo package xyz found
предполагают, что необходимые библиотеки больше не доступны (по крайней мере, не так, как они были, в тех же пакетах). Вот почему я предлагаю перестроить программу, если это возможно, или запустить ее в системе, в которой она работала, со старыми библиотеками.попробуйте
readelf -l uclsyn_linux
запросить программный переводчик и подскажет что вам не хватает.источник
readelf -l <file>
с файлом с тем жеldd
поведением (not a dynamic executable
), но я не вижу ничего, указывающего на отсутствующую библиотеку. Я вижуElf file type is EXEC (Executable file)
,Entry point
,Program Headers
иSection to Segment mapping
. Что именно я должен искать в выводе?В Arch Linux , если файл 32-битный elf, вы можете установить lib32-gcc-libs (из multilib-репозитория), чтобы решить эту проблему.
источник