Форум программистов, компьютерный форум, киберфорум
Наши страницы
Rem_
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 2.

Установка SDL2 в среде разработки CodeBlocks

Запись от Rem_ размещена 22.08.2015 в 19:00

В статье я напишу как нужно правильно ставить SDL2. В некоторой степени я пишу себе подсказки, потому что первый раз я воевал с этой установкой целую ночь.

На момент написания статьи актуальные версии:
Главная страница - http://libsdl.org/
Страница для скачивания SDL version 2.0.3 (stable) - http://libsdl.org/download-2.0.php
Там доступны исходники, бинарные сборки, и то что нам нужно, библиотека для разработчиков. Для кодеблокса выбираем mingw версию.
Нажмите на изображение для увеличения
Название: 2015-08-20 04 19 35.png
Просмотров: 361
Размер:	8.6 Кб
ID:	3261
Вот тут появляется первая особенность. Залезаем в архив и видим кучу папок:
Нажмите на изображение для увеличения
Название: 2015-08-22 09 24 28.png
Просмотров: 145
Размер:	22.4 Кб
ID:	3262
В теории одна из папок нужна для 64битных систем, но ради максимальной совместимости мы будем использовать другую, 32бинтую версию i686-w64-mingw32. И именно эту папку распаковываем в нужное место. Получилось вот так:
Название: 2015-08-22 10 48 53.png
Просмотров: 978

Размер: 9.6 Кб

Теперь качаем CodeBlocks.
Официальный сайт - http://www.codeblocks.org/
Страница для скачивания (бинарники, исходники, репозиторий) - http://www.codeblocks.org/downloads
Скачивание бинарников - http://www.codeblocks.org/downloads/26
Нас интересует дистриб с компиляторами. Поэтому выбираем codeblocks-13.12mingw-setup.exe Качать можно с разных мест, я выбрал Sourceforge.net.
Нажмите на изображение для увеличения
Название: 2015-08-22 10 53 43.png
Просмотров: 361
Размер:	15.4 Кб
ID:	3264
Установка стандартная, запуск стандартный.
Сейчас тоже сделаем немного по особенному. Сначала напишем код (он ясно дело не будет компилироваться), а затем будем подключать библиотеку, чтоб избежать появляющихся ошибок.

В кодеблоксе есть шаблон программы для SDL 1.2 но нет для SDL 2. Поэтому начинаем с пустого места.
File > New > Project... > ищем иконку Empty project > Go
Откроется мастер создания нового проекта. Выбираем папку для проектов, вписываем название, остальные поля заполняются автоматически.
Нажмите на изображение для увеличения
Название: 2015-08-22 14 51 04 project title.png
Просмотров: 319
Размер:	29.0 Кб
ID:	3265
Дальше нужно поставить галки, что компилить, версию для дебагера или для релиза. Так как я не понимаю разницы, то выбираю только Release. Жмём Finish.
Название: 2015-08-22 14 56 30 empty proj.png
Просмотров: 1022

Размер: 5.5 Кб
Видно, что в "рабочем пространстве" появился проект, но справа нет кода. Добавим пустой файл в проект.
File > New (хотя можно нажать на первую иконку в панели инструментов) > Empty file
Появится окно с вопросом "хотите ли вы добавить файл в текущий проект, предварительно сохранив его?" Да.
Выбираем место для сохранения (по умолчанию уже будет папка нашего проекта), пишем имя main, расширение .c само добавится.
Нажмите на изображение для увеличения
Название: 2015-08-22 15 10 02 save main.png
Просмотров: 308
Размер:	32.8 Кб
ID:	3267
И уже весь проект будет выглядеть таким образом:
Нажмите на изображение для увеличения
Название: 2015-08-22 15 27 52 proj file.png
Просмотров: 397
Размер:	7.6 Кб
ID:	3268

Сейчас напишем маленький код. Полезности от него никакой, зато можно проверить правильность подключения библиотек.
C
1
2
3
4
5
6
7
8
9
10
#include <SDL.h>
 
int main( int argc, char* args[] )
{
    SDL_Init( SDL_INIT_EVERYTHING );
    SDL_CreateWindow("My first sdl window", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
    SDL_Delay(3000);
    SDL_Quit();
    return 0;
}
Программа должна подключить заголовочный файл SDL.h. Инициализировать все свои подсистемы. Создать окно с заголовком в определенном месте определенных размеров, показать его. Подождать 3 секунды. Закрыть SDL. Вернуть значение 0.



И вот тут начинается самое весёлое. Нам нужно объяснить кодеблоксу, где брать файлы для корректной работы. Вот попробуем сразу закомпилить нашу программу. Жмём на шестерёнку или Ctrl+F9
Нажмите на изображение для увеличения
Название: 2015-08-22 16 05 12 SDL no file.png
Просмотров: 362
Размер:	3.2 Кб
ID:	3269
Компилятор не понимает где искать заголовочные файлы. Поможем ему.
Settings > Compiler... Во вкладке Search directories > вкладка Compiler. Мжём кнопку Add. Указываем папку с подключаемыми заголовочными файлами ...include\SDL. У меня получилось вот так:
Нажмите на изображение для увеличения
Название: 2015-08-22 16 14 07 include sdl.png
Просмотров: 338
Размер:	3.3 Кб
ID:	3270

Пробуем собрать. Жмём шестерёнку. Ошибка. В новой вкладке открывается файл SDL_platform.h и ругается на то, что не видит файла winapifamily.h
Нажмите на изображение для увеличения
Название: 2015-08-22 17 06 41 winapi h.png
Просмотров: 381
Размер:	14.1 Кб
ID:	3271
Ну а это не просто ошибка, а настоящий баг! Причём официальный. И его обещают исправить в следующем релизе. А нам что делать? Нужно качать исправленный файл и подменить им существующий.
Качаем этот исправленный - https://hg.libsdl.org/SDL/raw-file/e217ed463f25/include/SDL_platform.h
Помещаем его в C:\SDL2\i686-w64-mingw32\include\SDL2. Подтверждаем копирование с заменой.

Пробуем скомпилить. Жмём шестерёнку. Куча ошибок:
Нажмите на изображение для увеличения
Название: 2015-08-22 17 36 27 undef ref.png
Просмотров: 242
Размер:	8.1 Кб
ID:	3272
Теперь он не видит нужных SDL функций. Нам нужно прилинковать библиотеки из папки lib.
Settings > Compiler... Во вкладке Search directories > вкладка Linker. Мжём кнопку Add. Указываем папку ...\lib
Нажмите на изображение для увеличения
Название: 2015-08-22 17 46 07 add lib.png
Просмотров: 123
Размер:	17.5 Кб
ID:	3273

Пробуем зарелизить. Жмём шестерёнку. Ошибки остались, растуды твою туды.
Ещё нужно прописать волшебную строчку в дополнительных настройках линкера.
Settings > Compiler... Во вкладке Linker settings прописать следующее:
-lmingw32 -lSDL2main -lSDL2
Нажмите на изображение для увеличения
Название: 2015-08-22 17 55 01 lmingw.png
Просмотров: 412
Размер:	3.1 Кб
ID:	3274

Жмём. Снова опять жмём шестерёнку.
0 error(s), 0 warning(s)
урааааа!!! зарабоооталааааа!!!
Срочно нажимаем зелененький треугольничек рядом с шестеренкой:
Нажмите на изображение для увеличения
Название: 2015-08-22 18 05 03.png
Просмотров: 326
Размер:	23.2 Кб
ID:	3275
ааыыыыыыыыыыы!! Да что такое то? А это наша уже готовая скомпилированная программа не видит файла динамической библиотеки SDL2.dll

Вот тут есть два варианта. Один для вас, другой для тех, кто будет скачивать и запускать ваши программы.
Сам файл находится в папке bin - C:\SDL2\i686-w64-mingw32\bin

Вариант 1. Для вас. Закинуть файл в папку винды, если у вас есть права администратора. В разных туторах советуют разные подпапки, но почему бы просто не закинуть в C:\Windows ? Я закинул, у меня всё заработало.
При запуске программы появляется простое окно с выбранным заголовком, ждёт 3 секунды и закрывается.

Вариант 2. Для других людей. В этом случае вы должны будете распространять свою программу вместе с файлом. Положите SDL2.dll рядом с екзешником. В моём случае это D:\Coding\SDL2\First_SDL_prog\bin\Release\First_SDL_prog.exe
Заархивируйте оба файла (или вообще все файлы, которые будут использоваться в одном проекте) и передавайте другим на тестирование. При запуске программа будет искать лежащий рядом SDL2.dll, и если найдёт то запустится. Если не найдёт, то будет искать в Windows и ещё в нескольких местах. В общем обязательно сопровождайте свои программы этой динамической библиотекой.

Ещё возможен вариант с появлением таких ошибок:
Цитата:
||=== Build: Release in First_SDL_prog (compiler: GNU GCC Compiler) ===|
ld.exe||cannot find -lSDL2main|
ld.exe||cannot find -lSDL2|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 8 second(s)) ===|
Это значит, что вы правильно прописали строчку в дополнительных настройках линкера, но не правильно указали папку lib.

Вот теперь точно всё. Вы готовы к установке sdl2 и запуску программ.
Вы даже не представляете, как мне пришлось до всего этого доходить. Поэтому я составил такой подробный план, чтоб было всё наглядно и понятно.
Удачи всем.
Размещено в Без категории
Просмотров 2526 Комментарии 1
Всего комментариев 1
Комментарии
  1. Старый комментарий
    Аватар для Croessmah
    Цитата:
    Для вас. Закинуть файл в папку винды, если у вас есть права администратора. В разных туторах советуют разные подпапки, но почему бы просто не закинуть в C:\Windows ? Я закинул, у меня всё заработало.
    Достаточно прописать путь к папке с библиотеками в переменную PATH и всё!
    Запись от Croessmah размещена 25.08.2015 в 20:44 Croessmah вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru