LINUX.ORG.RU

Где лучше создавать symlinks?

 , ,


0

3

Всем привет.Собственно вернулся в линукс и пытаюсь все делать красиво и правильно. Решил поставить игрушку (рогалик Cataclysm: DDA). Нашел её в арчевском AUR, но во время установки (а именно компиляции) вылетает ошибка. Как я понял она проявляеться из-за флага -Werror, который сообщает компилятору воспринимать любое предупреждение как ошибку. Сделал поиск по файлам в папке, думал если найду в каком-то файле этот флаг - уберу и скомпилирую в warning. Но оказалось, что флаг этот где-то не там спрятался. Хорошо, попробовал с git вытащить последнюю версию и скомпилить самостоятельно, но пока тянул с github'a нашёл 64bit версию спрятанную на их ftp (готовые бинарники, что с сайта, не работали, т.к. требовали 32тные либы). Запускаю - спрашивает либы, например, надо liblua5.2.so.0 . Поискал в /usr/lib нашёл файлы типа liblua5.2.so, без нолика в конце. Хорошо, сделал через ln -s линк, запустилась игра - все супер. Как я понимаю я схитрил и не все программы требующие liblua5.2.so.0 будут работать корректно с тем что я прилинковал, или даже если будут, в будущем я обновлю либу и pacman удалит старые файлы, игра то перестанет запускаться. Нужно, как я понимаю, вручную снова линковать. Но дело в том что таких либ у меня много (лишь для этой игры создавал около 5 ссылок), как их всех поддерживать? Думал закинуть в /usr/local/lib и туда кучковать все эти потенциально не рабочие либы, но arch, как форумы говорят, эту папку не использует. Это можно настроить, но как вообще правильно со всем этим бороться? Не зря же в арче она по дефорту игнорируеться. Спасибо.

1. программу ставишь в /opt/имя_программы

2. делаешь там каталог lib и ложишь в него ссылки или даже сами библиотеки которые требует программа

3. ложишь в этот каталог bin и т.п. от программы.

4. делаешь скрипт запуска программы в /usr/bin c содержимым:

LD_LIBRARY_PATH="/opt/имя_программы/lib" exec /opt/имя_программы/bin/бинарник_программы

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

зенитар_чемпион вроде что-то патчил, но имхо пока что так проще.

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

О, а я пробовал пихать ссылки в папку с бинарником.

-------

Сделал вот так: LD_LIBRARY_PATH=/opt/cataclysmdda-0.C/lib exec /opt/cataclysmdda-0.C/cataclysm-launcher

пишет ./cataclysm: error while loading shared libraries: liblua5.2.so.0: cannot open shared object file: No such file or directory

Может из-за того что cataclysm-launcher это скрипт? Но я пробовал и просто cataclysm (это уже бинарник) прописывать, но не помогло. Вот код cataclysm-launcher:

#!/bin/sh
TARGET_FILE=$0

cd `dirname $TARGET_FILE`
TARGET_FILE=`basename $TARGET_FILE`

# Iterate down a (possible) chain of symlinks
while [ -L $TARGET_FILE ]
do
    TARGET_FILE=`readlink $TARGET_FILE`
    cd `dirname $TARGET_FILE`
    TARGET_FILE=`basename $TARGET_FILE`
done

# Find the physical path and name of target file.
DIR=`pwd -P`
BIN=$(basename $0)

cd $DIR || exit $?

# If name does not match a binary or is this same script, find the right one
if [ ! -f $BIN ] || [ $BIN = "cataclysm-launcher" ]
then
                                                              1,1           Top

Кстати, не лучше ли в /usr/local/bin скрипт вставлять?

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

Патчить бинарники? Звучит как очень плохая идея :)

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

Кстати, не лучше ли в /usr/local/bin скрипт вставлять?

без разницы, можно и туда.

пишет ./cataclysm: error while loading shared libraries: liblua5.2.so.0: cannot open shared object file: No such file or directory

ссылки то в /opt/cataclysmdda-0.C/lib напихал? исправил или просто копировал, а то может битые получились.

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

Скопировал те что остались в папке! Извините, лор развивает телепатию? :) Исправил все заработало, спасибо! А что эти ссылки двухсторонние, что они не работают если их копировать?

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

Извините, лор развивает телепатию?

нет я этому с детства учился. Помогает в работе.

А что эти ссылки двухсторонние, что они не работают если их копировать?

Ссылка бывает с полным путем и с сокращенным. Полный это если от / указывать путь к файлы на который ссылается, а сокращенный это можно просто указать что в этом же каталоге файл, или указать путь как ../../my_lib

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

зря вы так, если к одному талант есть то к другому не быть не может!

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

сокращенный

По-правильному это называется «относительный путь». В выводе ls -l можно увидеть куда указывает ссылка.
Если ссылка указывает на абсолютный путь то она всегда начинается со слеша, в противном случае путь относительный.

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

было такое желание, написать что относительный, побоялся что в контексте непонятно будет.

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