Форум программистов, компьютерный форум, киберфорум
Rem_
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

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

Запись от Rem_ размещена 22.08.2015 в 19:00
Показов 28131 Комментарии 1
Метки sdl

В статье я напишу как нужно правильно ставить 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
Просмотров: 899
Размер:	8.6 Кб
ID:	3261
Вот тут появляется первая особенность. Залезаем в архив и видим кучу папок:
Нажмите на изображение для увеличения
Название: 2015-08-22 09 24 28.png
Просмотров: 557
Размер:	22.4 Кб
ID:	3262
В теории одна из папок нужна для 64битных систем, но ради максимальной совместимости мы будем использовать другую, 32бинтую версию i686-w64-mingw32. И именно эту папку распаковываем в нужное место. Получилось вот так:
Название: 2015-08-22 10 48 53.png
Просмотров: 6178

Размер: 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
Просмотров: 739
Размер:	15.4 Кб
ID:	3264
Установка стандартная, запуск стандартный.
Сейчас тоже сделаем немного по особенному. Сначала напишем код (он ясно дело не будет компилироваться), а затем будем подключать библиотеку, чтоб избежать появляющихся ошибок.

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

Размер: 5.5 Кб
Видно, что в "рабочем пространстве" появился проект, но справа нет кода. Добавим пустой файл в проект.
File > New (хотя можно нажать на первую иконку в панели инструментов) > Empty file
Появится окно с вопросом "хотите ли вы добавить файл в текущий проект, предварительно сохранив его?" Да.
Выбираем место для сохранения (по умолчанию уже будет папка нашего проекта), пишем имя main, расширение .c само добавится.
Нажмите на изображение для увеличения
Название: 2015-08-22 15 10 02 save main.png
Просмотров: 635
Размер:	32.8 Кб
ID:	3267
И уже весь проект будет выглядеть таким образом:
Нажмите на изображение для увеличения
Название: 2015-08-22 15 27 52 proj file.png
Просмотров: 684
Размер:	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
Просмотров: 850
Размер:	3.2 Кб
ID:	3269
Компилятор не понимает где искать заголовочные файлы. Поможем ему.
Settings > Compiler... Во вкладке Search directories > вкладка Compiler. Мжём кнопку Add. Указываем папку с подключаемыми заголовочными файлами ...include\SDL. У меня получилось вот так:
Нажмите на изображение для увеличения
Название: 2015-08-22 16 14 07 include sdl.png
Просмотров: 669
Размер:	3.3 Кб
ID:	3270

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

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

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

Жмём. Снова опять жмём шестерёнку.
0 error(s), 0 warning(s)
урааааа!!! зарабоооталааааа!!!
Срочно нажимаем зелененький треугольничек рядом с шестеренкой:
Нажмите на изображение для увеличения
Название: 2015-08-22 18 05 03.png
Просмотров: 671
Размер:	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\Releas e\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 и запуску программ.
Вы даже не представляете, как мне пришлось до всего этого доходить. Поэтому я составил такой подробный план, чтоб было всё наглядно и понятно.
Удачи всем.
Метки sdl
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 1
Комментарии
  1. Старый комментарий
    Аватар для Croessmah
    Для вас. Закинуть файл в папку винды, если у вас есть права администратора. В разных туторах советуют разные подпапки, но почему бы просто не закинуть в C:\Windows ? Я закинул, у меня всё заработало.
    Достаточно прописать путь к папке с библиотеками в переменную PATH и всё!
    Запись от Croessmah размещена 25.08.2015 в 20:44 Croessmah вне форума
 
Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru