Развертывание Linux игры, общие библиотеки / зависимости - PullRequest
2 голосов
/ 09 мая 2011

У меня есть кроссплатформенное приложение (игра). Он использует библиотеку SDL. Я не могу связать это статически из-за лицензии LGPL. В Windows я связываю файл DLL, в Mac OSX я связываю каталог Frameworks. Но как это можно решить в GNU / Linux? Если у пользователя нет SDL-библиотек, установленных в его системе, возникает ошибка:

ошибка при загрузке общих библиотек: libSDL-1.2.so.0: не удается открыть файл общего объекта: нет такого файла или каталога

Даже если я упаковываю файл .so, система, похоже, не использует его.

Другая проблема заключается в том, что я не хочу принудительно переопределять пользовательские библиотеки. SDL не является проблемой, но, например, библиотеки OpenAL сильно различаются, и пользователь может иметь работающие библиотеки OpenAL, в то время как у меня может произойти сбой на его компьютере.

Ответы [ 3 ]

6 голосов
/ 09 мая 2011

По умолчанию Linux не ищет ни текущий каталог, ни каталог, из которого запускается двоичный файл. Если вы хотите легкий подход, сделайте это:

$> LD_PRELOAD=/path/to/your.so programName

Правильный подход - установить переменную окружения LD_LIBRARY_PATH, представляющую собой список путей поиска, разделенных двоеточиями. Добавьте путь к вашим библиотекам в этот список.

$> export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/your/libs"
$> programName

Если вы действительно хотите проявить творческий подход, ваш бинарный файл может содержать собственный путь поиска, если вы настроите его правильно:

http://www.eyrie.org/~eagle/notes/rpath.html

1 голос
/ 13 мая 2011

Это решение зависит от того, какой именно дистрибутив Linux вы используете (точнее, от того, какой менеджер пакетов), но я думаю, что это «самое чистое» решение вашей проблемы:

Создайте пакет, содержащий ваше приложение (наUbuntu или Debian это пакет .deb для использования с apt).Таким образом, вы можете установить зависимости от разделяемых библиотек.Вам не нужно будет развертывать SDL / OpenAL самостоятельно, и если эти пакеты будут выпущены в более новых версиях, вам не придется обновлять свой собственный пакет.Таким образом, ваше приложение будет намного меньше и его будет легче распространять, и если SDL / OpenAL не будут присутствовать в целевой системе, они будут установлены.Недостатком является то, что ваше приложение не является автономным.

1 голос
/ 09 мая 2011

Там также $ ORIGIN .

...