[sisyphus] игры для ALT Linux
Alexander Bokovoy
ab на altlinux.org
Вс Июл 26 12:15:10 MSD 2009
2009/7/26 Andrew Clark <andrewclarkiii на gmail.com>:
>
>> > и, соответственно, звука нет. В сизифе проверить не могу сейчас, там так
>> > же?
>> Скорее всего, в игре грузится "вручную" libSDL.so через dlopen, а не
>> прямой компоновкой во время сборки. Поэтому и хочет игра libSDL.so.
>
> Простите, можно подробнее с этого места? Если я правильно понял,
> shared object загружается самой игрой отдельно, а не вместе с ней, как ее
> часть?
> Верно?
Приложение может использовать внешние компоненты (библиотеки)
различным образом. Оно может быть скомпоновано с библиотекой напрямую,
в момент сборки, а может подгружать ее в момент исполнения
самостоятельно. В первом случае загрузка осуществляется в тот момент,
когда приложение запускается, средствами системы (ld (1)). Во втором
случае приложение самостоятельно подгружает некий внешний модуль (или
библиотеку) прямым использованием функции dlopen(3). Делается это в
первую очередь для загрузки плагинов, но также и для того, чтобы не
грузить в память весь код опциональных возможностей, которые
предоставляет библиотека.
В случае libSDL оберткой над dlopen(3) в GNU/Linux выступает
SDL_LoadObject(), которая используется в libSDL_Image.so для
динамической загрузки библиотек поддержки соответствующих форматов
изображений -- libjpeg.so.*, libtiff.so.* и тому подобных. Ошибка, на
самом деле, не в libSDL*.
libopenal1 умеет по умолчанию динамически грузить libalsa.so.2, если
на платформе доступен dlopen(3). А libopenal0 совершенно по такому же
принципу грузит libSDL и вот здесь ошибка и проявляется.
Однако если в случае libSDL_image определение того, как должна
называться библиотека, происходит при сборке и в бинарник
прописывается полное название (например, libjpeg.so.62), определенное
автоматически при сборке, то в libopenal это не происходит, там
намертво в коде прошита строка "libSDL.so" без всяких определений.
Отсюда и ошибка.
Так что исправлять нужно libopenal, а пример как это сделать, можно
взять в configure от libSDL_image. Неплохо было бы заодно исправить и
openal-soft, которая грузит ту самую libalsa.so.2, намертво прописав
эту строку в коде, без всяких определений.
--
/ Alexander Bokovoy
Подробная информация о списке рассылки Sisyphus