Сайт | Скачать | Видео | Wiki

Автор Тема: [Как использовать либы и бинарники из других дистров и при этом не навредить?]  (Прочитано 3699 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Fliker09

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1624
  • Репутация: +120/-1
  • Автор темы
  • Puppy 4ever!
Всё крайне просто - нужно задать запускаемому приложению собственный(е) параметр(ы) окружения. А как увидеть это самое окружение? Очень легко - наберите в терминале вот эту короткую команду:

Цитата
export

Вы увидите много записей разного назначения. Говоря конкретно о библиотеках нас интересует вот это строка:

Цитата
LD_LIBRARY_PATH="/usr/lib/qt/lib:/usr/lib/mozilla:/lib:/usr/lib:/usr/X11R7/lib:/root/my-applications/lib"

Разберёмся на примере реальной задачи. У нас есть предположим программа MyMegaCalculator. И предположим что мы её взяли из дистрибутива Debian. И зависимостей у проги море... И многие из этих зависимостей являются библиотеки которые отсутствуют в нашем дистрибутиве и репозитарии, которые у нас есть в системе и репозитарии но более новых версии или же тех же версии но при их подмене вызывают проблемы в других приложениях. Решение простое - мы берём и кладём эти библиотеки в нестандартные папки (т.е. в папки которые не используются системой для их поиска). Ну скажем мы положили эти самые библиотеки в /usr/share/mymegacalculator/lib . Теперь отправляемся в /usr/bin и создаём скрипт mymegacalculator.sh . В нём пишем следующие:

Цитата
#!/bin/sh
LD_LIBRARY_PATH="/usr/share/mymegacalculator/lib:/usr/lib/qt/lib:/usr/lib/mozilla:/lib:/usr/lib:/usr/X11R7/lib:/root/my-applications/lib" mymegacalculator

Также изменяем ярлык запуска нашего приложения. Теперь к запуску подлежит не mymegacalculator a mymegacalculator.sh . Как видим из скрипта что выше мы даём понять конкретно нашей программе что необходимые ей библиотеки необходимо искать также в указанной нами папке. Таким образом мы решаем два вопроса - как запустить необходимое нам приложение которое недоступно у нас и в то же время не навредить нашему любимому дистрибутиву :).

Будут вопросы - спрашивайте ;) :)!

Обновление.

Такую же фичу можно использовать и для бинарников. Это трюк я применяю уже в особых случаях. Например для сосуществования разных версии GTK или Qt (оба используют не только либы но и бинарники для своих нужд). Всё просто - опять нужно переопределить окружение. В случае с бинарниками за это отвечает:

Цитата
PATH="/usr/lib/qt/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R7/bin:/root/my-applications/bin"

Здесь можно применить две хитрости (впрочем в теории это можно применить и с либами. Но лично я такого ещё не делал, хотя паппик для этого идеально подходит). Можем как и в случае либ создать свою отдельную директорию и пихнуть туда нужные бираники и ткнуть прогу на них (думаю вы и сами понимаете как это сделать). А можно и по другому - сменить приоритет системной папки. В отличие от других дистров у паппика изначально в окружении есть папка для хранения либ и бинарников которая обычно в линуксе не используются. Я говорю про /root/my-applications . Как же это применить на практике? Очень просто - помещаем нужные файлы в соответствующие папки и задаём такое окружение:

Цитата
PATH="/root/my-applications/bin":/usr/lib/qt/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R7/bin"

или

Цитата
LD_LIBRARY_PATH="/root/my-applications/lib:/usr/lib/qt/lib:/usr/lib/mozilla:/lib:/usr/lib:/usr/X11R7/lib"

Как видим я просто изменил порядок записей. Но это отражается на приоритет поиска нужных бинарников или либ. Удачных экспериментов :)!
« Последнее редактирование: 18 Апрель 2010, 00:55:23 от Fliker09 »
Я покинул проект так что прошу в случае чего писать мне на мыло!
Драйверы от разных систем НЕСОВМЕСТИМЫ!
http://wellminded.com/puppy/pupsearch.html -
 - поиск по http://www.murga-linux.com/puppy/
http://www.minus.com/ - для постоянного хранения файлов
http://rghost.ru/ - для временного хранения файлов
http://appdb.winehq.org/ - база данных WINE
http://jabberworld.info/ - всё о Jabber
http://convertfiles.com/ - конвертер файлов