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

Simple DirectMedia Layer (SDL) - свободная кроссплатформенная мультимедийная библиотека, реализующая единый программный интерфейс к графической подсистеме, звуковым устройствам и средствам ввода для широкого спектра платформ. Данная библиотека активно используется при написании кроссплатформенных мультимедийных программ (в основном игр).

Официально поддерживаются следующие операционные системы: Microsoft Windows, Mac OS X, Linux, iOS и Android.

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

Начиная с версии 2.0, SDL распространяется под условиями лицензии ; до этого использовалась лицензия GNU Lesser General Public License, что позволяло свободно использовать библиотеку в коммерческих программах при условии, что она используется в них как динамически подключаемая библиотека.

SDL создал Сэм Лантинга, будучи ведущим программистом компании Loki Entertainment Software. История SDL начинается со времен, когда Сэм работал над программой-эмулятором Microsoft Windows для Macintosh. Он заметил, что многие куски кода без проблем могут работать на Linux. И он решил создать небольшую библиотеку, чтобы ей могли воспользоваться другие программисты. В октябре 1997 был выпущен релиз библиотеки с версией 0.3, а позже эту библиотеку вовсю использовала компания Loki Software для портирования игр под Linux.

После банкротства Loki Software Сэм работал в качестве ведущего разработчика в Blizzard, где велись работы по портированию World of Warcraft на Linux, но в компании решили закрыть проект.

С июля 2012 года Сэм присоединился к команде разработчиков Valve, где занимается дальнейшей разработкой SDL.

Структура Simple DirectMedia Layer

SDL сам по себе довольно прост. Его можно рассматривать как тонкую прослойку, обеспечивающую поддержку для 2D-операций над пикселами, звука, доступа к файлам, обработки событий и т. п.. Он часто используется в дополнение к OpenGL, предоставляя поддержку мыши, клавиатуры и джойстиков.

Библиотека состоит из нескольких подсистем, таких как Video, Audio, CD-ROM, Joystick и Timer. В дополнение к этой базовой низкоуровневой функциональности, существует ряд стандартных библиотек, предоставляющих дополнительную функциональность:

  • SDL image - поддержка различных растровых форматов;
  • SDL mixer - функции для организации сложного аудио, в основном, сведение звука из нескольких источников;
  • SDL net - поддержка сетевых функций;
  • SDL ttf - поддержка шрифтов TrueType;
  • SDL rtf - отрисовка текста в формате RTF.

Среда программирования:

Добрый день и добро пожаловать. Это серия статей будет посвящена библиотеке SDL2. В них я дам базовые знания, необходимые для написания графических приложений с помощью этой библиотеки. SDL2 - низкоуровневая библиотека, написанная для получения "почти" прямого доступа ко всему оборудованию компьютера. Что это значит? Больше скорости работы, меньше памяти, но и требования по знаниям у нее чуть больше. Но ничего бояться не нужно. Самый большой ее плюс в том, что она кроссплатформена, хотите писать код с минимальным отличием, который будет работать как в Windows так и в Linux/Mac? Тогда вам сюда.

Сразу же скачаем библиотеку. . Распакуйте этот архив куда угодно. Я положил в корень диска С (С:\SDL2)

Открываем студию и создаем новый проект -> Пустой проект.
Создаем в нем любой.cpp файл. Это важный шаг.
Нажимаем правой кнопкой мыши (ПКМ) в обозревателе решений по проекту -> свойства.

Если все хорошо то видим такое окно:

Выбираем С/С++ -> Общие -> Дополнительные каталоги включаемых файлов
Находим папку SDL2 и заходим в папку Includes. Нажимаем ОК. В строке получится что-то вроде C:\SDL2\include;%(AdditionalIncludeDirectories)

Компоновщик -> Ввод -> Дополнительные зависимости
Здесь необходимо нажать изменить и в Дополнительные зависимости прописать это:

SDL2.lib SDL2main.lib SDL2test.lib

Заходим в Компоновщик -> Система -> Подсистема
Выбираем (если не стоит) консоль.

А теперь последний штрих. Соберите проект как он есть. Это создаст ехе-файл.
Перейдите в папку "мои документы" и найдите свой проект (у меня мои документы/Visual studio 2015/projects/project1/debug) и помеcтите туда файл SDL2.DLL. Ваша программа НЕ БУДЕТ работать без этого файла.

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

//подключим SDL и stdio #include #include //Некоторые константы нашего окна const int SCREEN_WIDTH = 640 ; const int SCREEN_HEIGHT = 480 ; int main(int argc, char * args ) { //Какое окно будет рендерится SDL_Window* window = NULL ; //Поверхность окна SDL_Surface* screenSurface = NULL ; //Включим SDL if (SDL_Init(SDL_INIT_VIDEO) < 0 ) { printf ("SDL не смог запуститься! SDL_Error: %s\n " , SDL_GetError() ) ; } else { //Создаем окно window = SDL_CreateWindow("Урок1" , SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN) ; if (window == NULL ) { printf ("Окно не может быть создано! SDL_Error: %s\n " , SDL_GetError() ) ; } else { //Получаем поверхность screenSurface = SDL_GetWindowSurface(window) ; //Заполняем ее белым цветом SDL_FillRect(screenSurface, NULL , SDL_MapRGB(screenSurface- > format, 0xFF , 0xFF , 0xFF ) ) ; //Обновляем поверхность SDL_UpdateWindowSurface(window) ; //Ждем две секунды SDL_Delay(2000 ) ; } } //И удаляем из памяти окно SDL_DestroyWindow(window) ; //Выход из SDL SDL_Quit() ; return 0 ; }

Если в результате его выполнения вы увидели консоль и окно (Которое через 2 секунды закрылось), то вы все сделали правильно! До встречи на следующем уроке.

Если вы когда-нибудь пытались программировать графику в операционной системе DOS , то наверно знаете, что большая часть кода — это низкоуровневая работа с портами ввода-вывода, прерываниями и т.п. С одной стороны это интересно, но в то же время такая работа очень сложна и код получается абсолютно непереносимый на другие платформы. В нормальных ОС непосредственный доступ к регистрам железа крайне ограничен или невозможен. Работа осуществляется посредством драйверов. Работа с драйвером все еще сложна, особенно для начинающих. По этой причине появляются библиотеки, которые являются прослойкой между вашей программой и драйверами устройств. Такие библиотеки значительно облегчают жизнь и позволяют писать простой код. Но библиотека библиотеке рознь. И так, разрешите представить — Simple DirectMedia Layer.

Иначе — SDL. Библиотека предоставляет доступ к видео и аудио оборудованию вашего компьютера, а также к устройствам ввода, таким как мышь, клавиатура и джойстик. Эту библиотеку используют в самых различных программах, начиная от MPEG-проигрывателей и заканчивая эмуляторами. Но по большей части SDL используется для создания игр. Например таких как и Civilization: Call to Power . Вот скриншоты:

SDL по своим возможностям очень напоминает Microsoft DirectX API . Но поддерживает большое число операционных систем (то есть ваши программы будут работать в нескольких операционных системах) и имеет интерфейс с многими языками программирования. Библиотека написана на Си (хотя прекрасно работает с С++), но поддерживает очень много других языков, даже такие как Perl, Python и PHP ! Поддерживаемые операционные системы: Linux, BeOS, MacOS, Solaris, FreeBSD, IRIX, Win32 . Распространяется библиотека по лицензии GNU Lesser General Public License version 2 . Это означает, что вы можете без проблем создавать коммерческие программы.

SDL создал замечательный человек Sam Lantinga , который работает в компании Blizzard Entertainment и работал в компании Loki Entertainment Software ведущим программистом. История SDL начинается с времен, когда Сэм работал над программой эмулятором Макинтош для Windows . Он заметил, что многие куски кода без проблем могут работать в Linux. И он решил создать небольшую библиотеку, чтобы ей могли воспользоваться другие программисты. В октябре 1997 был выпущен релиз библиотеки с версией 0.3, а позже эту библиотеку во всю использовала компания Loki Software для портирования игр под Linux .

Как говорит Сэм, сравнивать SDL и DirectX все равно что сравнивать апельсин и яблоко. Единственное сходство в том, что это фрукты. SDL предоставляет значительно более простой API , чем DirectX . SDL изначально создана для 2D-графики и не имеет непосредственно функций для 3D-графики, но прекрасно дружит с OpenGL. Для поддержки сетевых функций можно использовать библиотеку SDL_net .

Конечно, выбор библиотеки для своего проекта — личное дело каждого, но все-таки SDL является бесспорным лидером для создания игр или мультимедиа-программ. Если вы не хотите использовать SDL для своей игры, то все равно рекомендую ознакомиться с приемами работы с библиотекой, чтобы повысить уровень своего образования.

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

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

2.3.1. Компиляция и установка основной библиотеки 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”

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

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


#include #include 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” создаст простое и небольшое окно с оранжевым треугольником в центре:

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

Описание:

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


Сборка:

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

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

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


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

Описание:

Сетевая библиотека 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

Описание:

Библиотека 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

Описание:

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


Сборка:

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

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

Описание:

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


Сборка:

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

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

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\Makefi le.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

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\Makefi le.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” – он должен воспроизвестись, помимо этого должно открыться окно простенького визуализатора, если окно с ним активно то можно перемотать трек стрелками на клавиатуре или поставить его на паузу пробелом.



После запуска в файле “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