LINUX.ORG.RU

как ставить LD_LIBRARY_PATH в Gentoo по правилам

 , ,


0

1

Игра требует библиотек, которые уже поставлены, естественно в подкаталоге где сама игра, не в систему. Некоторые старше чем в системе, некоторых в системе вообще нет. Как грамотно и культурно добавить в LD_LIBRARY_PATH, чтобы оно было только для конкретного юзера, не затрагивая всю систему и чтобы притом не надо было постоянно писать export итд. Способов нагуглил понятное дело много, но как это полагается делать в конкретно генте?

но как это полагается делать в конкретно генте?

Так же как и во всех других дистрах. Добавляй в .bash_profile конкретного пользователя.

Kron4ek ★★★★★
()
Ответ на: комментарий от anonymous

Так нога останется не простреленной.

anonymous
()
Ответ на: комментарий от anonymous

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

justin_case
() автор топика
Ответ на: комментарий от Kron4ek

тогда вопрос зачем нужны /etc/ld.so.conf.d/ и всякие другие /etc/env.d?

Кроме того, через .bash_profile постоянно приходится набирать source ~/.bash_profile перед запуском, а это бесит.

justin_case
() автор топика

Если глобально и для всех пользователей, то это можно прописать в файл /etc/environment. Синтаксис не знаю - поищи примеры в интернете.

Если локально, то возьми файл run_game.sh из этой игры: https://yadi.sk/d/VU8tPelkZrBd7 Он состоит из 5 частей:

  1. Выставляет текущую директорию (надо для KDE, иначе текущая директория будет /, и игра не найдёт файлы данных).
  2. Проверяет наличие директории «Data» (это не обязательно, можно стереть).
  3. Определяет разрядность системы, чтобы выставить правильный LD_LIBRARY_PATH (lib32 или lib64)
  4. Собственно, выставляет его
  5. Запускает игру

sh-файл я взял из игры World of Goo

ZenitharChampion ★★★★★
()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от justin_case

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

anonymous
()
Ответ на: комментарий от justin_case

тогда вопрос зачем нужны /etc/ld.so.conf.d/ и всякие другие /etc/env.d?

Насчет ld.so.conf.d не знаю, а env.d - чтобы глобально переменные выставить.

Кроме того, через .bash_profile постоянно приходится набирать source ~/.bash_profile перед запуском, а это бесит.

Правда? Он должен автоматически при запуске (точнее, при входе пользователя) выполняться.

Ну и как анон выше написал, лучше просто в скрипт запуска игры добавить.

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 1)
Ответ на: комментарий от anonymous

это с гога как раз. Мне важно принцип понять, вида «Поставил игру X, Прописал там то пути к ее либам (если они бинарные).» В таком случае это будет годно для вообще всех, в которые я буду играть.

И еще - если я путь к либам игры запилю по порядку раньше чем $LD_LIBRARY_PATH будет ли это охзначать что сперва обыщет пути игры а уже потом общие?

justin_case
() автор топика
Ответ на: комментарий от justin_case

Если игра использует LD_LIBRARY_PATH (а она скорее всего это делает), то нормальная ситуация для неё будет переопределить твой LD_LIBRARY_PATH. Расчёт на то, что ты сам модифицируешь скрипт запуска, если тебе это нужно, или вообще используешь другой.

anonymous
()
Ответ на: комментарий от justin_case

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

anonymous
()
Ответ на: комментарий от anonymous

Либы есть, но они старше чем в портаже, значит такие игре и нужны. Если я накидаю их в системные каталоги, то может поднасрать когда запускаю другие проги или апдейчу систему (в конце концов я же не 1 день в игру играть буду). Мне бы найти способ только локально переопределить LD_LIBRARY_PATH. И кстати когда набираешь env |grep LD_LIBRARY_PATH то почему то ничего не показывает, под рутом тоже. ЧЗХ?

justin_case
() автор топика
Ответ на: комментарий от justin_case

LD_LIBRARY_PATH используется только для переопределения пути поиска либ линкером, в системе приложениями он не используется. Например, ты можешь переопределить любые символы в libc таким образом, очень удобно.

Игре всё равно скорее всего, если они имеют совместимость на уровне abi, то можно использовать и более новые, иногда просто создав симлинк с подходящим soname (и совсем не важно, что либа другой версии, если символы и их поведение не менялось).

Не кидай в системные каталоги, кидай к игре. Она же у тебя где-то в /home/user/opt/appname установлена, правильно? Ну в крайнем случае в /usr/local или /opt/appname но это уже говно. Значит, она тащит с собой либы где-то, скорее всего они будут appname/libs или вроде того. Туда и кидай скачанные с интернета файлы желаемых версий. Но поскольку версиям не всегда надо совпадать, зачастую можено сделать симлинк в libs/libname.so.1.12 указывающий куда-нибудь на симлинк /usr/lib32/libname.so.1 который указывает на libname.so.1.15 (хотя работать это вовсе не обязано). Особенно в случае когда у требуемых либ куча зависимостей и прижётся полубунты выкачать. Короче купи в стиме и не заморачивайся.

anonymous
()

по правилам, братишка, по правилам.

Bruce_Lee ★★
()
Ответ на: комментарий от anonymous

да блин ЕСТЬ либы. все какие нужны есть в папке ~/игра/libs. Проблема в том что в этой папке НЕ ищутся файлы при запуске а вместо этого ищутся системные либы, которые новее чем нужны. Например нужна libpng12 которая в системе давно 16. Мне нужно

1. Сделать так чтобы поиск либов был перенаправлен из системных папок в каталог ~/игра/libs и там искалось раньше чем в системных. 2. Чтобы это было только для моего конкретного юзера а всю остальную систему не трогало.

justin_case
() автор топика
Ответ на: комментарий от justin_case

положи в файл ~/игра/runme.sh:

LD_LIBRARY_PATH=libs ./exe

сделай это файл исполняемым, кликни по нему мышкой в фм (хотя там уже должен быть такой файл) и по желанию добавь desktop файл в applications, чтобы во всяких менюшках появилось (хотя инсталлер должен был это сделать за тебя).

зачем ты всё усложняешь?

anonymous
()
Ответ на: комментарий от anonymous

Вот плюсую. Мой мега-скрипт использовать не обязательно - можно сделать в одну строку, как у тебя.

А ещё я, похожа, в игнор-списке у топикстартера - я же ему это ещё 2 часа назад написал

ZenitharChampion ★★★★★
()
Ответ на: комментарий от ZenitharChampion

да не в игнор листе, я в общем так и делал, но топик я создал с целью узнать грамотный правильный подход. из серии «Как это должно быть сделано по логике дистра». Потому что кастыльно выглядит.

justin_case
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.