Как использовать либы и бинарники из других дистров и при этом не навредить?

30 января 2011 - georgii-2

Перенёс georgii-2

 

Автор - Fliker09

 

Всё крайне просто - нужно задать запускаемому приложению собственный(е) параметр(ы) окружения. А как увидеть это самое окружение? Очень легко - наберите в терминале вот эту короткую команду:
 

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"

 

Как видим я просто изменил порядок записей. Но это отражается на приоритет поиска нужных бинарников или либ. Удачных экспериментов

Улыбка

!