Настройка SDL для CodeBlocks
.docx
Инструкция по настройке SDL 1.2 для Code::Blocks 16.01
(Windows 7/8/10)
Версия 1.2 от 16/02/2017
Е.С. Бондарев
Шаг 1 – Выбираем вариант загрузки CodeBlocks
http://www.codeblocks.org/downloads
(выбрать можно любой удобный вариант, самый простой - Download the binary release)
Шаг 2 – Выбираем подходящую версию (самый удобный вариант codeblocks-16.01mingw-setup.exe)
http://www.codeblocks.org/downloads/26
Шаг 3 – Скачиваем SDL (выделенное фиолетовым)
https://www.libsdl.org/download-1.2.php
Шаг 4 – Скачиваем SDL_ttf (выделенное фиолетовым)
https://www.libsdl.org/projects/SDL_ttf/release-1.2.html
Шаг 5 – Скачиваем SDL_draw
https://sourceforge.net/projects/sdl-draw/
Шаг 6 – Скачиваем шрифты
http://www.fontsquirrel.com/fonts/charis-sil
Шаг 7 – Скачанные файлы представлены ниже
Шаг 8 – Создаем папку в корне диска С (компиляторы не любят русских букв)
Шаг 9 – Открываем архив SDL-devel-1.2.15-mingw32.tar.gz, копируем папку SDL-1.2.15
чтобы получилось так:
Открыть архив с расширением tar.gz можно при помощи бесплатного ПО 7-Zip, или аналогов вроде WinRAR и другие.
Ссылка на скачивание (х32) - http://www.7-zip.org/a/7z1604.exe
Ссылка на скачивание (х64) - http://www.7-zip.org/a/7z1604-x64.exe
Шаг 10 – Открываем архив SDL_ttf-devel-2.0.11-VC.zip, открываем папку SDL_ttf-2.0.11\include и файл SDL_ttf.h копируем в папку С:\SDL\SDL-1.2.15\include\SDL как показано ниже
Шаг 11 – Открываем архив SDL_ttf-devel-2.0.11-VC.zip, открываем папку SDL_ttf-2.0.11\lib\x86 и файл SDL_ttf.lib копируем в папку С:\SDL\SDL-1.2.15\lib как показано ниже
Шаг 12 – Открываем архив SDL_draw-1.2.13.tar.gz, папку SDL_draw-1.2.13 копируем в папку С:\SDL\ как показано ниже
Шаг 13 – Открываем архив SDL-1.2.15-win32.zip, копируем файл SDL.dll в папку C:\SDL\SDL_draw-1.2.13\CodeBlocks
Шаг 14 – В папке C:\SDL\SDL_draw-1.2.13\CodeBlocks открываем SDL_draw_static.cbp. В CodeBlocks выбираем project – properties, нажимаем на кнопку «project’s build options».
Шаг 15 – Выбираем раздел Search directories. Нажимаем add – выбираем папку C:\SDL\SDL-1.2.15\include\SDL\ как на картинках ниже и нажимаем ОК.
Шаг 16 – В том же меню переходим в раздел linker, нажимаем add и добавляем папку C:\SDL\SDL-1.2.15\lib\ , нажимаете ОК и еще раз ОК.
Шаг 17 – Выбираем пункт Build – Build and run, появляется такое сообщение и создается файл libSDL_draw.a
Копируем libSDL_draw.a в папку C:\SDL\SDL-1.2.15\lib
Шаг 18 – В папке C:\SDL\SDL_draw-1.2.13\CodeBlocks открываем SDL_draw_dynamic.cbp. В CodeBlocks делаем проект активным (он должен быть выделен жирно), нажимаем project – build options. Выбираем слева Debug, заходим в раздел Linker settings, выделяем вторую строчку (SDL\lib\libSDL.dll.a) и нажимаем Edit, и заменяем на C:\SDL\SDL-1.2.15\lib\libSDL.dll.a
Шаг 19 – Выбираем пункт Build – Build and run. (В случае ошибки необходимо повторить шаг 15).
Появляется сообщение и в папке появляется файл SDL_draw.dll.
Шаг 20 – Заходим в папку C:\SDL\SDL_draw-1.2.13\include, и копируем файл SDL_draw.h в папку C:\SDL\SDL-1.2.15\include\SDL
Шаг 21 – Создаем новый проект (пустой) (File – New – Project).
Добавляем пустой файл. (File – New – Empty file).
Называем его main.cpp
Выбираем ОК.
Шаг 22 – Собираем библиотеки и файлы и копируем их в папку с проектом.
SDL_draw.dll из C:\SDL\SDL_draw-1.2.13\CodeBlocks
Zlib1.dll из SDL_ttf-devel-2.0.11-VC.zip\SDL_ttf-2.0.11\lib\x86
SDL_ttf.dll из SDL_ttf-devel-2.0.11-VC.zip\SDL_ttf-2.0.11\lib\x86
Libfreetype-6.dll из SDL_ttf-devel-2.0.11-VC.zip\SDL_ttf-2.0.11\lib\x86
CharisSILR.ttf из Charis-SIL.zip
SDL.dll из SDL-1.2.15-win32.zip
ВАЖНО! Для удобства можно скопировать все .dll файлы в папку С:\Windows\system32 (для 32-битных систем) или в С:\Windows\SysWOW64 (для 64-битных систем). В этом случае не придется каждый раз добавлять их в проект.
Должно получиться следующее:
Шаг 23 – Открываем CodeBlocks с нашим проектом, переходим в project – properties, нажимаем project’s build options. В разделе Search directories выбираем Compiler, нажимаем Add, и указываем C:\SDL\SDL-1.2.15\include\SDL\
В разделе Linker нажимаем Add и указываем C:\SDL\SDL-1.2.15\lib\
Шаг 24 – Переходим в раздел Linker setting и в поле «Other linker settings» указываем: -lmingw32 -lSDLmain -lSDL -lSDL_draw -lSDL_ttf -lSDL.dll
Запись ведется через знак минус! Последняя библиотека (-lSDL.dll) не является обязательной, но в некоторых редакциях ОС без нее не работает.
Шаг 25 – Копируем текст из методички (см. приложение) в файл main.cpp
Шаг 26 – Выбираем Build – Build and run
От автора:
Выражаю благодарность всем студентам, кто помогал и помогает исправлять ошибки в данной инструкции.
Для удобства все библиотеки были собраны в одном месте и доступны по ссылкам:
https://yadi.sk/d/0jbS-90D3EBDgX
http://voenmeh.ru/afiles/getSDL.rar
Все замечания, уточнения, прошу направлять в ВК – vk.com/norte
ПРИЛОЖЕНИЕ А. ТЕКСТ 1.
#include <SDL.h>
#include <SDL_ttf.h>
int main(int argc, char *argv[])
{
SDL_Surface *screen;
SDL_Event event;
TTF_Font *fnt = NULL;
SDL_Color text_color;
SDL_Rect dest;
SDL_Surface *text_surface = NULL;
/* Строка "Привет, Мир!" в кодировке utf8 */
char hello_world[]="Привет, Мир!";
if (SDL_Init(SDL_INIT_VIDEO))
return 1;
if (TTF_Init())
return 1;
if(!(screen=SDL_SetVideoMode(640,480,32,
SDL_ANYFORMAT))){
TTF_Quit();
SDL_Quit();
return 1;
}
if(!(fnt = TTF_OpenFont("CharisSILR.ttf", 29))){
TTF_Quit();
SDL_Quit();
return 3;
}
dest.x = 200;
dest.y = 100;
dest.w = 1;
dest.h = 1;
text_color.r = 0;
text_color.g = 0;
text_color.b = 255;
if(text_surface = TTF_RenderUTF8_Solid(fnt,
hello_world, text_color))
{
SDL_BlitSurface(text_surface, NULL, screen,
&dest);
SDL_FreeSurface(text_surface);
text_surface = NULL;
}
SDL_Flip(screen);
while(SDL_WaitEvent(&event)){
if(event.type == SDL_QUIT ||
(event.type == SDL_KEYDOWN &&
event.key.keysym.sym == SDLK_ESCAPE))
{
TTF_CloseFont(fnt);
TTF_Quit();
SDL_Quit();
return 0;
}
}
TTF_CloseFont(fnt);
TTF_Quit();
SDL_Quit();
return 2;
}
ПРИЛОЖЕНИЕ Б. ТЕКСТ 2.
#include <SDL.h>
#include <SDL_draw.h>
int main(int argc, char *argv[])
{
SDL_Surface *screen;
SDL_Event event;
if (SDL_Init(SDL_INIT_VIDEO))
return 1;
screen = SDL_SetVideoMode(640,480,32,
SDL_ANYFORMAT);
if (!screen)
{
SDL_Quit();
return 1;
}
Draw_FillEllipse(screen, 320, 240, 300, 200,
SDL_MapRGB(screen->format, 128, 128, 128));
SDL_Flip(screen);
while(SDL_WaitEvent(&event))
{
if(event.type == SDL_QUIT ||
(event.type == SDL_KEYDOWN &&
event.key.keysym.sym == SDLK_ESCAPE))
{
SDL_Quit();
return 0;
}
}
SDL_Quit();
return 2;
}