понедельник, 24 октября 2011 г.

Определение зависимостей и имен пакетов в debian/ubuntu

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


Данный пост решил написать, из за того, что такие вопросы возникают у многих людей, которые не очень давно работают в Linux. А так как я решение уже написал на форуме http://gamedev.ru, то заодно и сюда добавлю, т.к. после создания блога - совсем пусто. Хотя, несколько статей почти написал, но все еще не закончил. Заявленные проекты в первом посте заморежены, немного двигается только ro-se.sourceforge.net остальное в затишье - просто уехал на работу в другую страну, и ничего кроме работы не вижу :(, но хватит о грустном, вернемся к нашим бара... пакетам.

Неверный путь

Можно, все делать почти как и в винде - запускаем приложение из консоли, оно ругается на отсутствие файла библиотеки. Запускаем synaptic и ищем через поиск что-то похожее (в synaptic можно выставить фильтр по библиотекам, чтобы меньше пакетов просматривать). Если подозреваем, что это то что нужно - ставим. Запускаем приложение снова из консоли и смотрим результат. Ну и повторяем все это столько раз, сколько нужно. Но все это виновс вэй. мы же пойдем другим путем.

Делаем все правильно (IMHO)

И так Задача: есть бинарный файл engine для которого неизвестны зависимости.

  • Для получения списка зависимойтей используем команду:

    objdump -x <ИМЯ_БИНАРНИКА> | grep NEEDED

    в результате получаем список зависимостей
    Пример:
    objdump -x ./engine | grep NEEDED
    NEEDED              libSDL-1.2.so.0
    NEEDED              libGL.so.1
    NEEDED              liblua5.1.so.0
    NEEDED              libSDL_mixer-1.2.so.0
    NEEDED              libphysfs.so.1
    NEEDED              libIL.so.1
    NEEDED              libc.so.6
    NEEDED              libm.so.6
  • выясняем, в каком пакете какая либа:

    dpkg -S <ИМЯ_ФАЙЛА_ЛИБЫ_ЗАВИСОМОСТИ>

    Пример:

    dpkg -S libSDL-1.2.so.0
    libsdl1.2debian-pulseaudio: /usr/lib/libSDL-1.2.so.0
    libsdl1.2debian-pulseaudio: /usr/lib/libSDL-1.2.so.0.11.3
    соответственно, libsdl1.2debian-pulseaudio - это искомое имя пакета.
  • ставим пакет
    sudo apt-get install libsdl1.2debian-pulseaudio
в общем, как то так все делается обычно. но можно как и в винде, - путь, который я описал выше.

Комментариев нет:

Отправить комментарий