Как работают программы с либами?

Knoppix

Модераторы: Warderer, Модераторы разделов

reg123
Сообщения: 284
ОС: Vista

Как работают программы с либами?

Сообщение reg123 »

Вот запускается программа. Где она шарит либу? В своей папке шарит? или только в специальной папке с либами со строгими путями?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21408
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как работают программы с либами?

Сообщение Bizdelnick »

Это большой и сложный вопрос.
Во-первых, см. man ld.so.
Во-вторых, привязки к библиотекам кешируются ldconfig (см. man ldconfig), которая запускается после установки/удаления любого пакета с библиотеками (в пакетных дистрибутивах, естественно). Где ldconfig ищет библиотеки - прописано в её конфигурационном(ых) файле(ах).
В-третьих, что касается DT_RPATH, из опакеченных бинарников он обычно вырезается, а библиотеки раскладываются по стандартным путям. В случае самосборных программ там в общем случае может быть всё, что угодно (хотя, если разрабы в адеквате, при make install RPATH также вырезается).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
reg123
Сообщения: 284
ОС: Vista

Re: Как работают программы с либами?

Сообщение reg123 »

Могу ли я сделать так -- нужна мне программа, я её копирую откуда-нибудь к себе на комп, в свою папку и закидываю туда все нужные либы? И она работает.
В венде это запросто (если, конечно программа не защищена слишком сильно). Не далее как позавчера я со старого винта скопировал fallout3, запустил, он обругался на отсутствие двух либ, я ему скормил эти либы, он запустился как ни в чём не бывало.
Были более сложные случаи -- программа требует не только либы, но и ветки реестра. Подключаем внешний реестр к нынешнему, ищем, копируем -- программа работает (например возможен перенос с win2k-32 на win7x64).
Каких-нибудь полчаса и нужная прога запускается (не всегда, конечно, так уж запросто, но зачастую).

На дебиане пара подобных попыток провалилась. Т.е. ни поставить что-то старое, или новое, таким способом нельзя?
Если нет, то есть ли в природе такой дистриб у которого менее строгие правила? Меньше зависимостей и привязок? Вот в венде я всегда имею самую наиновейшую версию, даже СПОшного софта, без каких-либо усилий. А могу и старинную поставить. К примеру запросто запущу у себя 10-летний Gimp или Inkscape. В дебиане я связан по рукам и ногам. Попробовал компилировать, но это какой-то адъ с зависимостями.
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: Как работают программы с либами?

Сообщение Voral »

Есть такая переменная среды LD_LIBRARY_PATH. в ней можно перечислить где искать либы.
Соответственно прогу запускать

Код: Выделить всё

LD_LIBRARY_PATH=/usr/lib/yourappdir:$LD_ LIBRARY_PATH yourapp


Я когда то пользовался.
Смутно припоминаю, что есть более правильный способ задавать значение переменной, как привел выше могут быть какие-то проблемы.
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Как работают программы с либами?

Сообщение Hephaestus »

reg123 писал(а):
29.08.2013 01:32
Могу ли я сделать так -- нужна мне программа, я её копирую откуда-нибудь к себе на комп, в свою папку и закидываю туда все нужные либы? И она работает.
Наиболее правильный путь - собрать свой пакет, прописав свои пути.
Какие именно программа хочет либы - покажет ldd (вроде и пути показывает - уже не помню, хотя недавно только ковырялся).
И вот эти самые либы и пути к ним целиком зависят от самой программы, поэтому просто "закинуть и работать" в общем случае нельзя. Для тех программ, которые специально под это заточены - можно (например, какая-нибудь штуковина с бинарным инсталлятором, которая целиком ставится в /opt ).

reg123 писал(а):
29.08.2013 01:32
В венде это запросто
Не так уж и запросто. Бывалоча, просит софтина библиотеку, сообщает имя файла. Кладёшь рядом - не видит, хочет непременно где-нибудь в system32, а то и в более неожиданном месте. И вот где именно хочет - фиг поймёшь - имя файла говорит, а путь не говорит. Линуксовая ldd в этом смысле честнее и информативнее.
И опять же, где и что хочет программа - это только тараканы данной программы. Общей закономерности тут нету.

reg123 писал(а):
29.08.2013 01:32
На дебиане пара подобных попыток провалилась. Т.е. ни поставить что-то старое, или новое, таким способом нельзя?
Однозначного ответа нет. Зависит от программы. Вооружайтесь ldd, смотрите, чего проге не хватает, доустанавливайте нужные либы, создавайте на них симлинки. С версиями могут быть проблемы.

Но если непременно хочется всё сгрузить в один каталог и оттуда запускать - самый правильный вариант это только пересборка программы с патчингом исходников. Благо они (исходники) доступны. И желательно создание пакета. А вообще, лучше всего придерживаться политики дистрибутива, иначе он очень быстро превратится в помойку.

А вот в случае виндовой программы пересборка возможна далеко не всегда. И, бывает, не поймёшь, чего же этой программулине надо - то ли библиотеку не там ищет, то ли версия не нравится...
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21408
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как работают программы с либами?

Сообщение Bizdelnick »

reg123 писал(а):
29.08.2013 01:32
Могу ли я сделать так -- нужна мне программа, я её копирую откуда-нибудь к себе на комп, в свою папку и закидываю туда все нужные либы? И она работает.

Помимо вышеприведённого способа с заданием LD_LIBRARY_PATH можно воспользоваться программой chrpath для изменения RPATH бинарника.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Как работают программы с либами?

Сообщение Hephaestus »

А вот скажите, вариант с LD_LIBRARY_PATH работает во всех случаях? Что-то у меня сомнения.
Буквально недавно ковырял какую-то софтину (мультифон, что ли...), так она никак не хотела видеть либу, установленную специально ради неё из репов. Подозреваю, что LD_LIBRARY_PATH здесь не поможет.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21408
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как работают программы с либами?

Сообщение Bizdelnick »

fflatx писал(а):
29.08.2013 13:37
она никак не хотела видеть либу, установленную специально ради неё из репов

Может либа не той версии? Вывод ldd надо смотреть в таких случаях, без него ничего не понятно.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Как работают программы с либами?

Сообщение Hephaestus »

Bizdelnick писал(а):
29.08.2013 13:41
Вывод ldd надо смотреть в таких случаях, без него ничего не понятно.
Дык я по нему и ориентировался.
Софтина не запускается, какие ей либы нужны я вообще не знал.
Я взял ldd, он мне показал список нужных либ, некоторые из них уже были, другие отсутствовали.
По имени файла через apt-file я находил пакет и ставил. После чего опять смотрел ldd.
Практически все либы таким образом нашлись, а вот одна никак не хотела, хотя ставились они из репов, значит, размещались так, как принято в дистре.

Отсюда и вопрос: Если программа хочет видеть либу в определенном каталоге, а у нас, допустим такого каталога вообще нет - у нас все либы в другом месте, то здесь ведь единственный способ - создать этот каталог и кинуть туда нужную либу/симлинк, так? И LD_LIBRARY_PATH здесь как бы ничего не решает. Или всё-таки решает? Я вот это не могу понять.


Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21408
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как работают программы с либами?

Сообщение Bizdelnick »

fflatx писал(а):
29.08.2013 14:04
Дык я по нему и ориентировался.

Ну я-то не могу ориентироваться, не видя его. (-:
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как работают программы с либами?

Сообщение drBatty »

reg123
ИМХО этот вопрос уместен в Программирование
Это во всех unix'ах одинаково ИМХО.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как работают программы с либами?

Сообщение drBatty »

fflatx писал(а):
29.08.2013 13:37
LD_LIBRARY_PATH работает во всех случаях?

ИМХО нет. Неадекватный упоротый погромист вроде может и абсолютный путь прописать. Но нормальные люди так не делают.

Кроме того, либа может быть статически вкомпиллена. В этом случае конечно без пересборки не обойтись.


Ну и наконец, путей много, и работает только первый ЕМНИП. Если добавить свой путь, то до него просто может не дойти.

fflatx
спешу напомнить, что программы/либы из сырцов ставяться по умолчанию в /usr/local/, а вот программы/либы из репов в /usr. Причём приоритет у первого пути выше. Можно сколько кугодно ставить годную либу из репов, но программа будет упрямо юзать либу из /usr/local, пока вы её явно не удалите.

Вы из сырцов ничего часом не собирали?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21408
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как работают программы с либами?

Сообщение Bizdelnick »

drBatty писал(а):
29.08.2013 19:02
Кроме того, либа может быть статически вкомпиллена. В этом случае конечно без пересборки не обойтись.

Если она статически вкомпилена, то чего бы ей не работать?

drBatty писал(а):
29.08.2013 19:02
Ну и наконец, путей много, и работает только первый ЕМНИП. Если добавить свой путь, то до него просто может не дойти.

Почему это только первый? Пути-то общие для всех библиотек, а лежать они могут в разных каталогах, поэтому обходятся все по порядку. Вот насчёт приоритета не в курсе, надо маны курить.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Как работают программы с либами?

Сообщение drBatty »

Bizdelnick писал(а):
29.08.2013 19:06
Если она статически вкомпилена, то чего бы ей не работать?

это был ответ на:
fflatx писал(а):
29.08.2013 13:37
Буквально недавно ковырял какую-то софтину (мультифон, что ли...), так она никак не хотела видеть либу, установленную специально ради неё из репов.

Bizdelnick писал(а):
29.08.2013 19:06
Вот насчёт приоритета не в курсе, надо маны курить.

см. рис1.

мне тоже лень (:
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: