2.3. Компиляция и установка библиотек SDL-окружения


По своей структуре библиотека SDL не является полноценным SDK (Software Development Kit) для разработчиков игр, так как не включает в себя высокоуровневые функции для работы с графикой, звуком и внешними устройствами. Но благодаря тому, что она предоставляет прямой доступ к графической системе, звуковой карте, устройствам ввода (клавиатуре, мыши, джойстику), CD-ROM’ому, таймеру и в ней реализованы некоторые низкоуровневые функции для работы с графикой и звуком, библиотеку вполне можно использовать для разработки не слишком сложных приложений или портирования существующих, где SDL библиотека будет использоваться как блиттер. В библиотеке реализован только минимум необходимых функций, она не раздута на десятки мегабайт и достаточно быстра. По своей сути SDL является каркасом для других библиотек, которые поддерживают более сложные функции в какой-то одной области (графика, микширование звука, поддержка различных форматов файлов, GUI и. т. д). И уже вместе с этими дополнительными библиотеками SDL и образует достаточно многофункциональный, хоть и уже устаревший, SDK для разработчиков игр.

В этом разделе я рассмотрю сборку частоиспользуемых библиотек SDL. Некоторые из них поддерживаются официально, некоторые поддерживаются сторонними разработчиками. Собраное SDL-окружение для MinGW позволит вам легко перенести множество игр на платформу Windows.

<< Перейти к содержанию


2.3.1. Компиляция и установка основной библиотеки SDL


Описание:

Официальный сайт: http://www.libsdl.org/

Библиотека Simple DirectMedia Layer (SDL) реализует единый программный интерфейс к графической подсистеме, звуковым устройствам и средствам ввода для широкого спектра платформ. Она активно используется при написании мультимедийных программ: игр, эмуляторов или плееров, и является этаким подобием “DirectX” для огромного количества платформ. Более подробно про эту библиотеку можно прочитать здесь: Низкоуровневое расширение библиотеки SDL.


Сборка:

2.3.1.1. Скачиваем последнюю версию исходников библиотеки SDL с официального сайта, на момент написания статьи это 1.2.15: SDL-1.2.15.tar.gz

2.3.1.2. Распаковываем архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL-1.2.15”.

2.3.1.3. Компилируем и устанавливаем SDL-библиотеку:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” и набираем в консольном окне такие команды:


cd /c/Qt/build/SDL/SDL-1.2.15
./configure --prefix=/mingw
make
make install

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


./configure --help

Например, опция “–enable-stdio-redirect=no” отключает файлы “stdout.txt” и “stderr.txt”, которые создаются при запуске программы, и направляет вывод в консольное окно.

2.3.1.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая “SDL.dll” в “C:\Qt\MinGW\bin”

Статические “libSDL.a”, “libSDL.dll.a” и “libSDLmain.a” в “C:\Qt\MinGW\lib”

Хэдеры в “C:\Qt\MinGW\include\SDL”

2.3.1.5. Запуск и компиляция небольшого демо-кода:

Создаем файл “sdldemo.c” в папке “C:\Qt\build\SDL” с таким содержимым:


#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0f, 0.5f, 0.0f);
    glBegin(GL_TRIANGLES);
    glVertex2f(-1.0, -1.0);
    glVertex2f(0, 1.0);
    glVertex2f(1.0, -1.0);
    glEnd();
    glFlush();
    SDL_GL_SwapBuffers();
}

void SDL_Loop()
{
    Uint8 *keys;
    int done = 0;
    while (!done)
    {
        SDL_Event event;
        display();
        while (SDL_PollEvent(&event))
        {
            switch(event.type)
            {
            case SDL_QUIT:
                done = 1;
                break;
            }
        }
        keys = SDL_GetKeyState(NULL);
        if (keys[SDLK_ESCAPE])
          done = 1;
    }
}

int main(int argc, char *argv[])
{
    SDL_Surface *screen;
    SDL_Init(SDL_INIT_VIDEO);
    screen = SDL_SetVideoMode(200, 200, 16, SDL_OPENGL);
    SDL_Loop();
    SDL_Quit();
    return 0;
}

и сохраняем.

Для компиляции и запуска кода запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” и набираем в консольном окне такие команды:


cd /c/Qt/build/SDL
gcc -mwindows sdldemo.c -o sdldemo -lmingw32 -lSDLmain -lSDL -lopengl32
./sdldemo.exe

Приложение “sdldemo.exe” создаст простое и небольшое окно с оранжевым треугольником в центре:


Работа библиотеки SDL, скомпилированной MinGW'ом


<< Перейти к содержанию


2.3.2. Компиляция и установка библиотеки SDL_image


Описание:

Официальный сайт: http://www.libsdl.org/projects/SDL_image/

Библиотека SDL_image является расширением основной библиотеки SDL и позволяет использовать в SDL-приложениях различные форматы изображений, не ограничиваясь форматом “*.bmp”. SDL_image позволяет программистам легко использовать несколько форматов без необходимости написания функций загрузки и преобразования.


Сборка:

Внимание! Зависимости:

Библиотека zlib

Библиотека JPEG

Библиотека PNG

Библиотека TIFF (Опционально. Я не использовал, так как ничтожно малое количество проектов использует формат изображений “*.tiff”).

Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

2.3.2.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_image, на момент написания статьи последняя версия 1.2.12: SDL_image-1.2.12.tar.gz

2.3.2.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_image-1.2.12”.

2.3.2.3. Компилируем и устанавливаем библиотеку SDL_image:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


cd /c/Qt/build/SDL/SDL_image-1.2.12
./configure --prefix=/mingw
make
make install

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


./configure --help

2.3.2.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая библиотека “SDL_image.dll” в “C:\Qt\MinGW\bin”

Статическая “libSDL_image.a” в “C:\Qt\MinGW\lib”

Хэдеры в “C:\Qt\MinGW\include\SDL”

2.3.2.5. На этом установка завершена. При желании можно скомпилировать утилиту “showimage.exe”:


cd /c/Qt/build/SDL/SDL_image-1.2.12
gcc showimage.c -o showimage -I/mingw/include/SDL -lmingw32 -lSDLmain -lSDL -lSDL_image -mwindows

Если на “showimage.exe” перетащить любое изображение – оно откроется в окне.


<< Перейти к содержанию


2.3.3. Компиляция и установка библиотеки SDL_net


Описание:

Официальный сайт: http://www.libsdl.org/projects/SDL_net/

Сетевая библиотека SDL_net является расширением основной библиотеки SDL и позволяет использовать в SDL-приложениях сеть. SDL_net позволяет программистам легко обработавать сетевые соединения и передачу данных. Код, написанный с использованием функций из этой библиотеки, будет кроссплатформенным.


Сборка:

2.3.3.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_net, на момент написания статьи последняя версия 1.2.8: SDL_net-1.2.8.tar.gz

2.3.3.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_net-1.2.8”.

2.3.3.3. Компилируем и устанавливаем библиотеку SDL_net:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


cd /c/Qt/build/SDL/SDL_net-1.2.8
./configure --prefix=/mingw
make
make install

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


./configure --help

2.3.3.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая библиотека “SDL_net.dll” в “C:\Qt\MinGW\bin”

Статическая “libSDL_net.a” в “C:\Qt\MinGW\lib”

Хэдер “SDL_net.h” в “C:\Qt\MinGW\include\SDL”


<< Перейти к содержанию


2.3.4. Компиляция и установка библиотеки SDL_gfx


Описание:

Официальный сайт: http://www.ferzkopp.net/joomla/content/view/19/14/

Библиотека SDL_gfx содержит в себе функции рисования примитивов и работы над изображениями-спрайтами (масштабирование, повороты, фильтры и т.д). Она развились из проекта SDL_gfxPrimitives, который представлял основные процедуры рисования примитивов, таких как: линии, окружности и многоугольники. Библиотека не относится к официальным, но большое количество проектов ее используют.


Сборка:

2.3.4.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_gfx, на момент написания статьи последняя версия 2.0.24: SDL_gfx-2.0.24.tar.gz

2.3.4.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_gfx-2.0.24”.

2.3.4.3. Компилируем и устанавливаем библиотеку SDL_gfx:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


cd /c/Qt/build/SDL/SDL_gfx-2.0.24
./configure --prefix=/mingw
make
make install

Если при компиляции возникла ошибка:


libtool: Version mismatch error.  This is libtool 2.4.2, but the
libtool: definition of this LT_INIT comes from libtool 2.4.
libtool: You should recreate aclocal.m4 with macros from libtool 2.4.2
libtool: and run autoconf again.
make: *** [SDL_gfxPrimitives.lo] Error 63

Выполните команду:


autoreconf -fvi

И повторите конфигурирование, а затем компиляцию.


Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


./configure --help

2.3.4.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая библиотека “libSDL_gfx-14.dll” в “C:\Qt\MinGW\bin”

Статическая “libSDL_gfx.a” и “libSDL_gfx.dll.a” в “C:\Qt\MinGW\lib”

Хэдеры в “C:\Qt\MinGW\include\SDL”

2.3.4.5. На этом установка завершена. При желании можно скомпилировать утилиту “TestGfxTexture.exe”:


cd /c/Qt/build/SDL/SDL_gfx-2.0.24/Test
gcc TestGfxTexture.c -o TestGfxTexture -I/mingw/include/SDL -lmingw32 -lSDLmain -lSDL -lSDL_gfx -mwindows
./TestGfxTexture

При запуске откроется окно, показывающее результат текстурирования.


<< Перейти к содержанию


2.3.5. Компиляция и установка библиотеки SDL_ttf 2.0


Описание:

Официальный сайт: http://www.libsdl.org/projects/SDL_ttf/

SDL_ttf 2.0 представляет собой библиотеку отрисовки шрифтов TrueType, и используется вместе с библиотекой SDL. Это позволяет программистам использовать шрифты TrueType без написания собственного рендера шрифта. Благодаря функциям масштабирования шрифтов и антиалиасинга можно получить высокое качество вывода текста без особых усилий.


Сборка:

Внимание! Зависимости:

Библиотека FreeType 2

Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

2.3.5.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_ttf 2.0, на момент написания статьи последняя версия 2.0.11: SDL_ttf-2.0.11.tar.gz

2.3.5.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_ttf-2.0.11” .

2.3.5.3. Компилируем и устанавливаем библиотеку SDL_ttf 2.0:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


cd /c/Qt/build/SDL/SDL_ttf-2.0.11
./configure --prefix=/mingw
make
make install

Библиотека скомпилировалась с дефолтными параметрами. Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


./configure --help

2.3.5.4. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая библиотека “SDL_ttf.dll” в “C:\Qt\MinGW\bin”

Статическая “libSDL_ttf.a” и остальные в “C:\Qt\MinGW\lib”

Хэдеры в “C:\Qt\MinGW\include\SDL”

2.3.5.5. На этом установка завершена. При желании можно скомпилировать утилиту “showfont.exe”:


cd /c/Qt/build/SDL/SDL_ttf-2.0.11
gcc showfont.c -o showfont -I/mingw/include/SDL -lmingw32 -lSDLmain -lSDL -lSDL_ttf

Если на “showfont.exe” перетащить любой “*.ttf” шрифт – он откроется в окне.


<< Перейти к содержанию


2.3.6. Компиляция и установка библиотеки SDL_mixer


Описание:

Официальный сайт: http://www.libsdl.org/projects/SDL_mixer/

SDL_mixer это библиотека микширования звука, которая может использоваться вместе с библиотекой SDL. Она позволяет программистам использовать звуки вместе с музыкой и не писать собственные микшеры. Библиотека также упрощает загрузку, обработку и воспроизведения звуков и музыки всевозможных форматов файлов, в собираемой нами конфигурации библиотека сможет поддерживать такие форматы как “*.mp3”, “*.ogg”, “*.flac”, “*.mod” и несколько других.


Сборка:

Внимание! Зависимости:

Библиотека SDL

Библиотека OGG

Библиотека OggVorbis (libVorbis)

Библиотека FLAC

Библиотека MikMod

Библиотека MAD (libmad)

Перед компиляцией библиотеки скомпилируйте и установите все зависимости!

2.3.6.1. Скачиваем последнюю стабильную версию исходников библиотеки SDL_mixer, на момент написания статьи последняя версия 1.2.12: SDL_mixer-1.2.12.tar.gz

2.3.6.2. Распаковываем скачанный архив в папку “C:\Qt\build\SDL”, исходники библиотеки должны быть в папке “C:\Qt\build\SDL\SDL_mixer-1.2.12”.

2.3.6.3. Открываем файл “C:\Qt\build\SDL\SDL_mixer-1.2.12\Makefile.in” и заменяем одинаковые строки #69 и #72:


$(LIBTOOL) --mode=link $(CC) -o $@ $(objects)/playwave.lo $(SDL_CFLAGS) $(SDL_LIBS) $(objects)/$(TARGET)

на строку


$(LIBTOOL) --mode=link $(CC) -o $@ $(objects)/playwave.lo $(SDL_CFLAGS) $(objects)/$(TARGET) $(SDL_LIBS)

после замены сохраняем файл.

2.3.6.4. Компилируем и устанавливаем библиотеку SDL_mixer:

Запускаем “C:\Qt\MinGW\msys\1.0\msys.bat” или ConEmu и набираем в консольном окне такие команды:


cd /c/Qt/build/SDL/SDL_mixer-1.2.12
./configure --enable-music-mp3-mad-gpl --disable-music-mp3 --disable-music-fluidsynth-midi --prefix=/mingw
make
make install

Настоятельно рекомендую использовать декодер MAD, вместо нестабильного и старого smpeg. Если у вас в процессе конфигурирования не подцепляется FLAC, попробуйте сначала ввести строчку:


export LIBS="-L/mingw/lib -logg -lws2_32"

А потом уже выполнять конфигурирование. Без этой строки “conftest.c” может не слинковаться. После компиляции не забудьте выполнить:


export -n LIBS

Чтобы очистить переменную окружения LIBS.


Если вам нужны какие-то специальные параметры, то их всегда можно изменить перед конфигурированием. Список доступных опций можно посмотреть выполнив команду


./configure --help

2.3.6.5. Скомпилированные статическая и динамическая библиотеки, заголовочные файлы должны скопироваться в соответствующие папки:

Динамическая библиотека “SDL_mixer.dll” в “C:\Qt\MinGW\bin”

Статическая “libSDL_mixer.a” и остальные в “C:\Qt\MinGW\lib”

Хэдер “SDL_mixer.h” в “C:\Qt\MinGW\include\SDL”

2.3.6.6. В комментариях обнаружилась интересная ошибка на стадии линковки, при компилировании библиотеки SDL_mixer компилятором MinGW (GCC 4.7.2). Ошибка возникала из-за того, что libtool, используевшийся для компиляции в SDL_mixer не мог подлинковать библиотеку libpthread, отвечающую за потоки и нужную для дефолтного конфигурирования libmikmod. В данном блоке показана последовательность действий, выполнив которые вы сохраните многопоточность библиотеки libmikmod и сможете скомпилировать и установить библиотеку SDL_mixer.

Все действия актуальны на момент написания этого блока (04.06.2012).


Все библиотеки в зависимостях, кроме MikMod, конфигурируются, компилируются и устанавливаются стандартно.

Библиотека “libmikmod-3.2.0” конфигурируется теперь так:


export CFLAGS="-march=native"
./configure --prefix=/mingw
make
make install
export -n CFLAGS

И, наконец, библиотека “SDL_mixer-1.2.12” компилируется так:

2.3.6.6.1. Открываем файл “C:\Qt\build\SDL\SDL_mixer-1.2.12\Makefile.in” и заменяем строки #26, #69 и #72 на следующие,


LDFLAGS = -pthread @BUILD_LDFLAGS@
$(LIBTOOL) --mode=link $(CC) -o $@ $(objects)/playwave.lo $(SDL_CFLAGS) $(objects)/$(TARGET) $(SDL_LIBS)
$(LIBTOOL) --mode=link $(CC) -o $@ $(objects)/playwave.lo $(SDL_CFLAGS) $(objects)/$(TARGET) $(SDL_LIBS)

сохраняя порядок соответственно.


Затем обычное конфигурирование и компиляция:


./configure --enable-music-mp3-mad-gpl --disable-music-mp3 --disable-music-fluidsynth-midi --prefix=/mingw
make
make install

Стоит заметить, что теперь приложения, использующие SDL_mixer будут еще требовать и библиотеку “pthreadGC2.dll”. В комментариях есть примеры сборок SDL_mixer без libmikmod’a или с libmikmod’ом, но без потоков.

2.3.6.7. На этом установка завершена. Для проверки правильности работы библиотеки можно скомпилировать простейший плеер “sdlwav.exe”. Для этого нужно скачать файл “sdlwav.c“, сохранить его в папку “C:\Qt\build\SDL” и скомпилировать его следующим образом:


cd /c/Qt/build/SDL
gcc sdlwav.c -o sdlwav -I/mingw/include/SDL -lmingw32 -lSDLmain -lSDL -lSDL_mixer

Теперь если на “sdlwav.exe” перетащить любой файл, содержащий музыку или звук в формате “*.mp3”, “*.flac”, “*.ogg”, “*.wav” или “*.mod” – он должен воспроизвестись, помимо этого должно открыться окно простенького визуализатора, если окно с ним активно то можно перемотать трек стрелками на клавиатуре или поставить его на паузу пробелом.


Работа библиотеки SDL_mixer, скомпилированной MinGW'ом


После запуска в файле “stdout.txt” (он будет рядом с “sdlwav.exe”), или в выводе консоли будут показаны доступные декодеры и их количество. Для нашей конфигурации SDL_mixer получился следующий лог:


Before Mix_Init SDL_mixer supported: None
After  Mix_Init SDL_mixer supported: FLAC MOD OGG 
There are 5 available chunk(sample) decoders:
	WAVE
	AIFF
	VOC
	OGG
	FLAC
There are 6 available music decoders:
	WAVE
	MIKMOD
	NATIVEMIDI
	OGG
	FLAC
	MP3
Opened audio at 44100 Hz 16 bit stereo, 1024 bytes audio buffer
Music type: MUS_MP3_MAD

<< Перейти к содержанию



http://exlmoto.ru/mingw-development-environment/

Profile

uzverss: (Default)
uzverss

December 2024

S M T W T F S
12345 67
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 07:19 am
Powered by Dreamwidth Studios