Распространение SDL-программы
Содержание:
1. Введение;
2. Установка SDL;
3. Сборка с помощью make;
4.Распространение SDL-программы (Вы читаете данный раздел).
Как распространять SDL-программы, собранные под MinGw? Какие еще файлы (кроме полученного .exe) положить с ним в один каталог? Сами по себе программы на C++, собранные в «чистом» MinGW, требуют:
- mingwm10.dll - обязательно;
- libgcc_s_dw2-1.dll (файл стандартной «сишной» библиотеки GCC) - если сборка не произведена с ключом линковки -static-libgcc;
- libstdc++-6.dll (стандартная библиотека С++ для GCC) - если сборка без -static-libstdc++.
Здесь из соображений стабильности советую использовать динамические библиотеки, то есть не делать статичную линковку. Просто поместите упомянутые файлы в каталог игры.
Теперь - про SDL. Для работы «голой» SDL нужен файл SDL. dll. Для SDL_Image потребуются SDL_Image.dll и zlib1.dll, а также модули поддержки тех форматов, которые вы включили флагами из функции IMG_Init.
Напомню:
где флаги сочетаются через OR и могут быть:
Например, для включения поддержки всех трех графических форматов:
Хотя на практике - например, в играх - формат TIFF не потребуется.
Подводя итог по SDL_Image, скажу, что из каталога lib devel-пакета библиотеки надо положить в каталог программы:
- jpeg.dll - для поддержки JPEG, если используется IMG_INIT_JPG;
- libtiff-3.dll - TIFF;
- libpng12-0.dll - PNG.
Теперь - про SDl_Mixer. Из каталога lib devel-пакета этой библиотеки, обязательно потребуется SDL_Mixer.dll. Модули нужны выборочно - в зависимости от подключенных вами (через функцию Mix_Init) форматов:
- libogg-0.dll, libvorbis-0.dll, libvorbisfile-3.dll - все три этих файла нужны для поддержки OGG Vorbis;
- mikmod.dll - трекерная музыка форматов S3M, IT, XM, MOD
и других;
- smpeg.dll - поддержка MP3, однако сама по себе библиотека SMPEG умеет декодировать и видео в MPEG1.
Наконец - о SDL_Ttf. Из него в каталоге программы нужны SDL_ttf.dll и libfreetype-6.dll. Можно загружать как системные шрифты, так и брать свои.
Надеюсь, что статья поможет вам настроить систему сборки своей программы под MinGW. Я обошел вниманием связку Qmake + MinGW + SDL, однако, когда занимался этим вопросом и у меня всё получилось, было исполнено слишком много магических действий, чтобы теперь с точностью вспомнить все нужные шаги и отделить их от лишних. Поэтому приведу лишь часть для qmake-проекта:
При этом SDLmain.a и SDL.dll.a у меня лежат в каталоге сборки программы. Подозреваю, что можно всё упростить... И напомню, что важна последовательность линковки. Сначала:
И только потом:
Удачи!
1. Введение;
2. Установка SDL;
3. Сборка с помощью make;
4.
Этап 6. Распространение SDL-программы
Как распространять SDL-программы, собранные под MinGw? Какие еще файлы (кроме полученного .exe) положить с ним в один каталог? Сами по себе программы на C++, собранные в «чистом» MinGW, требуют:
- mingwm10.dll - обязательно;
- libgcc_s_dw2-1.dll (файл стандартной «сишной» библиотеки GCC) - если сборка не произведена с ключом линковки -static-libgcc;
- libstdc++-6.dll (стандартная библиотека С++ для GCC) - если сборка без -static-libstdc++.
Здесь из соображений стабильности советую использовать динамические библиотеки, то есть не делать статичную линковку. Просто поместите упомянутые файлы в каталог игры.
Теперь - про SDL. Для работы «голой» SDL нужен файл SDL. dll. Для SDL_Image потребуются SDL_Image.dll и zlib1.dll, а также модули поддержки тех форматов, которые вы включили флагами из функции IMG_Init.
Напомню:
int IMG_Init (int flags)
где флаги сочетаются через OR и могут быть:
- IMG_INIT_JPG;
- IMG_INIT_PNG;
- IMG_INIT_TIF.
- IMG_INIT_PNG;
- IMG_INIT_TIF.
Например, для включения поддержки всех трех графических форматов:
IMG_Init (IMG_INIT_JPG | IMG_INIT_PNG | IMG_INIT_TIF);
Хотя на практике - например, в играх - формат TIFF не потребуется.
Подводя итог по SDL_Image, скажу, что из каталога lib devel-пакета библиотеки надо положить в каталог программы:
- jpeg.dll - для поддержки JPEG, если используется IMG_INIT_JPG;
- libtiff-3.dll - TIFF;
- libpng12-0.dll - PNG.
Теперь - про SDl_Mixer. Из каталога lib devel-пакета этой библиотеки, обязательно потребуется SDL_Mixer.dll. Модули нужны выборочно - в зависимости от подключенных вами (через функцию Mix_Init) форматов:
- libogg-0.dll, libvorbis-0.dll, libvorbisfile-3.dll - все три этих файла нужны для поддержки OGG Vorbis;
- mikmod.dll - трекерная музыка форматов S3M, IT, XM, MOD
и других;
- smpeg.dll - поддержка MP3, однако сама по себе библиотека SMPEG умеет декодировать и видео в MPEG1.
Наконец - о SDL_Ttf. Из него в каталоге программы нужны SDL_ttf.dll и libfreetype-6.dll. Можно загружать как системные шрифты, так и брать свои.
Заключение про qmake
Надеюсь, что статья поможет вам настроить систему сборки своей программы под MinGW. Я обошел вниманием связку Qmake + MinGW + SDL, однако, когда занимался этим вопросом и у меня всё получилось, было исполнено слишком много магических действий, чтобы теперь с точностью вспомнить все нужные шаги и отделить их от лишних. Поэтому приведу лишь часть для qmake-проекта:
win32:{
QMAKE_CXXFLAGS += -mwindows
LIBS += -lSDLmain
LIBS += -lSDL.dll
LIBS += -lSDL_mixer // и остальные библиотеки-спутники
INCLUDEPATH += путь к qt/mingw/include/SDL
}
QMAKE_CXXFLAGS += -mwindows
LIBS += -lSDLmain
LIBS += -lSDL.dll
LIBS += -lSDL_mixer // и остальные библиотеки-спутники
INCLUDEPATH += путь к qt/mingw/include/SDL
}
При этом SDLmain.a и SDL.dll.a у меня лежат в каталоге сборки программы. Подозреваю, что можно всё упростить... И напомню, что важна последовательность линковки. Сначала:
LIBS += -lSDLmain
И только потом:
LIBS += -lSDL.dll
Удачи!