Как работают программы с либами?
Модераторы: Warderer, Модераторы разделов
-
reg123
- Сообщения: 284
- ОС: Vista
Как работают программы с либами?
Вот запускается программа. Где она шарит либу? В своей папке шарит? или только в специальной папке с либами со строгими путями?
-
Bizdelnick
- Модератор
- Сообщения: 21408
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как работают программы с либами?
Это большой и сложный вопрос.
Во-первых, см. man ld.so.
Во-вторых, привязки к библиотекам кешируются ldconfig (см. man ldconfig), которая запускается после установки/удаления любого пакета с библиотеками (в пакетных дистрибутивах, естественно). Где ldconfig ищет библиотеки - прописано в её конфигурационном(ых) файле(ах).
В-третьих, что касается DT_RPATH, из опакеченных бинарников он обычно вырезается, а библиотеки раскладываются по стандартным путям. В случае самосборных программ там в общем случае может быть всё, что угодно (хотя, если разрабы в адеквате, при make install RPATH также вырезается).
Во-первых, см. man ld.so.
Во-вторых, привязки к библиотекам кешируются ldconfig (см. man ldconfig), которая запускается после установки/удаления любого пакета с библиотеками (в пакетных дистрибутивах, естественно). Где ldconfig ищет библиотеки - прописано в её конфигурационном(ых) файле(ах).
В-третьих, что касается DT_RPATH, из опакеченных бинарников он обычно вырезается, а библиотеки раскладываются по стандартным путям. В случае самосборных программ там в общем случае может быть всё, что угодно (хотя, если разрабы в адеквате, при make install RPATH также вырезается).
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
reg123
- Сообщения: 284
- ОС: Vista
Re: Как работают программы с либами?
Могу ли я сделать так -- нужна мне программа, я её копирую откуда-нибудь к себе на комп, в свою папку и закидываю туда все нужные либы? И она работает.
В венде это запросто (если, конечно программа не защищена слишком сильно). Не далее как позавчера я со старого винта скопировал fallout3, запустил, он обругался на отсутствие двух либ, я ему скормил эти либы, он запустился как ни в чём не бывало.
Были более сложные случаи -- программа требует не только либы, но и ветки реестра. Подключаем внешний реестр к нынешнему, ищем, копируем -- программа работает (например возможен перенос с win2k-32 на win7x64).
Каких-нибудь полчаса и нужная прога запускается (не всегда, конечно, так уж запросто, но зачастую).
На дебиане пара подобных попыток провалилась. Т.е. ни поставить что-то старое, или новое, таким способом нельзя?
Если нет, то есть ли в природе такой дистриб у которого менее строгие правила? Меньше зависимостей и привязок? Вот в венде я всегда имею самую наиновейшую версию, даже СПОшного софта, без каких-либо усилий. А могу и старинную поставить. К примеру запросто запущу у себя 10-летний Gimp или Inkscape. В дебиане я связан по рукам и ногам. Попробовал компилировать, но это какой-то адъ с зависимостями.
В венде это запросто (если, конечно программа не защищена слишком сильно). Не далее как позавчера я со старого винта скопировал fallout3, запустил, он обругался на отсутствие двух либ, я ему скормил эти либы, он запустился как ни в чём не бывало.
Были более сложные случаи -- программа требует не только либы, но и ветки реестра. Подключаем внешний реестр к нынешнему, ищем, копируем -- программа работает (например возможен перенос с win2k-32 на win7x64).
Каких-нибудь полчаса и нужная прога запускается (не всегда, конечно, так уж запросто, но зачастую).
На дебиане пара подобных попыток провалилась. Т.е. ни поставить что-то старое, или новое, таким способом нельзя?
Если нет, то есть ли в природе такой дистриб у которого менее строгие правила? Меньше зависимостей и привязок? Вот в венде я всегда имею самую наиновейшую версию, даже СПОшного софта, без каких-либо усилий. А могу и старинную поставить. К примеру запросто запущу у себя 10-летний Gimp или Inkscape. В дебиане я связан по рукам и ногам. Попробовал компилировать, но это какой-то адъ с зависимостями.
-
Voral
- Сообщения: 1205
- ОС: Debian Wheezy (amd64)
Re: Как работают программы с либами?
Есть такая переменная среды 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 © ?
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
-
Hephaestus
- Сообщения: 3728
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
Re: Как работают программы с либами?
Наиболее правильный путь - собрать свой пакет, прописав свои пути.
Какие именно программа хочет либы - покажет ldd (вроде и пути показывает - уже не помню, хотя недавно только ковырялся).
И вот эти самые либы и пути к ним целиком зависят от самой программы, поэтому просто "закинуть и работать" в общем случае нельзя. Для тех программ, которые специально под это заточены - можно (например, какая-нибудь штуковина с бинарным инсталлятором, которая целиком ставится в /opt ).
Не так уж и запросто. Бывалоча, просит софтина библиотеку, сообщает имя файла. Кладёшь рядом - не видит, хочет непременно где-нибудь в system32, а то и в более неожиданном месте. И вот где именно хочет - фиг поймёшь - имя файла говорит, а путь не говорит. Линуксовая ldd в этом смысле честнее и информативнее.
И опять же, где и что хочет программа - это только тараканы данной программы. Общей закономерности тут нету.
Однозначного ответа нет. Зависит от программы. Вооружайтесь ldd, смотрите, чего проге не хватает, доустанавливайте нужные либы, создавайте на них симлинки. С версиями могут быть проблемы.
Но если непременно хочется всё сгрузить в один каталог и оттуда запускать - самый правильный вариант это только пересборка программы с патчингом исходников. Благо они (исходники) доступны. И желательно создание пакета. А вообще, лучше всего придерживаться политики дистрибутива, иначе он очень быстро превратится в помойку.
А вот в случае виндовой программы пересборка возможна далеко не всегда. И, бывает, не поймёшь, чего же этой программулине надо - то ли библиотеку не там ищет, то ли версия не нравится...
-
Bizdelnick
- Модератор
- Сообщения: 21408
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как работают программы с либами?
Помимо вышеприведённого способа с заданием LD_LIBRARY_PATH можно воспользоваться программой chrpath для изменения RPATH бинарника.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали:
-
Hephaestus
- Сообщения: 3728
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
Re: Как работают программы с либами?
А вот скажите, вариант с LD_LIBRARY_PATH работает во всех случаях? Что-то у меня сомнения.
Буквально недавно ковырял какую-то софтину (мультифон, что ли...), так она никак не хотела видеть либу, установленную специально ради неё из репов. Подозреваю, что LD_LIBRARY_PATH здесь не поможет.
Буквально недавно ковырял какую-то софтину (мультифон, что ли...), так она никак не хотела видеть либу, установленную специально ради неё из репов. Подозреваю, что LD_LIBRARY_PATH здесь не поможет.
-
Bizdelnick
- Модератор
- Сообщения: 21408
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как работают программы с либами?
Может либа не той версии? Вывод ldd надо смотреть в таких случаях, без него ничего не понятно.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
Hephaestus
- Сообщения: 3728
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
Re: Как работают программы с либами?
Дык я по нему и ориентировался.Bizdelnick писал(а): ↑29.08.2013 13:41Вывод ldd надо смотреть в таких случаях, без него ничего не понятно.
Софтина не запускается, какие ей либы нужны я вообще не знал.
Я взял ldd, он мне показал список нужных либ, некоторые из них уже были, другие отсутствовали.
По имени файла через apt-file я находил пакет и ставил. После чего опять смотрел ldd.
Практически все либы таким образом нашлись, а вот одна никак не хотела, хотя ставились они из репов, значит, размещались так, как принято в дистре.
Отсюда и вопрос: Если программа хочет видеть либу в определенном каталоге, а у нас, допустим такого каталога вообще нет - у нас все либы в другом месте, то здесь ведь единственный способ - создать этот каталог и кинуть туда нужную либу/симлинк, так? И LD_LIBRARY_PATH здесь как бы ничего не решает. Или всё-таки решает? Я вот это не могу понять.
-
Bizdelnick
- Модератор
- Сообщения: 21408
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как работают программы с либами?
Ну я-то не могу ориентироваться, не видя его. (-:
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Как работают программы с либами?
ИМХО нет. Неадекватный упоротый погромист вроде может и абсолютный путь прописать. Но нормальные люди так не делают.
Кроме того, либа может быть статически вкомпиллена. В этом случае конечно без пересборки не обойтись.
Ну и наконец, путей много, и работает только первый ЕМНИП. Если добавить свой путь, то до него просто может не дойти.
fflatx
спешу напомнить, что программы/либы из сырцов ставяться по умолчанию в /usr/local/, а вот программы/либы из репов в /usr. Причём приоритет у первого пути выше. Можно сколько кугодно ставить годную либу из репов, но программа будет упрямо юзать либу из /usr/local, пока вы её явно не удалите.
Вы из сырцов ничего часом не собирали?
-
Bizdelnick
- Модератор
- Сообщения: 21408
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как работают программы с либами?
Если она статически вкомпилена, то чего бы ей не работать?
Почему это только первый? Пути-то общие для всех библиотек, а лежать они могут в разных каталогах, поэтому обходятся все по порядку. Вот насчёт приоритета не в курсе, надо маны курить.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Как работают программы с либами?
это был ответ на:
см. рис1.
мне тоже лень (: