Суббота, 20.04.2024, 11:59
PIXELCODEПриветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта

Категории раздела
SDL и C/C++ [6]

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » SDL и C/C++

Статья 3. Настройка IDE Code::Blocks для кросс-компилирования c SDL под Linux, Windows, WinCE
   Цель статьи: настроить кросс-компиляцию для вышеуказанных платформ и понять как "прикручиваются" компиляторы на основе GNU GCC к IDE Code::Blocks. Попробовать простую отладку исполняемого файла Linux.

   Содержание статьи:
1. Введение;
2. Установка Code::Blocks и библиотеки SDL для Linux;
3. Добавляем компиляцию для target (целевой платформы) Windows;
4. Добавляем target WinCE;
5. Минимально необходимая отладка исполняемого файла для платформы Linux;
6. Заключение.

   Введение:
   Здравствуйте, друзья. Эта статья - не перевод официальной инструкции к C::B и не учебник (Боже упаси, учить вообще не благодарное занятие). Просто хочу помочь сэкономить время таким-же новичкам как я, желающим компилировать свои программки (игрушки, демки) с использованием свободной библиотеки SDL. Надеюсь, что с ее помощью Вы настроитесь быстро и обойдете "грабли", на которые наступал я. Продвинутых пользователей Linux прошу простить меня за излишнюю подробность изложения им известных вещей и... поправляйте, если что не так, в Linux я тоже недавно =)
   Установка тулчайнов для компиляции в систему подробнее описана в первой статье, но для Вашего удобства я вкратце продублирую это и здесь.

   Установка Code::Blocks и библиотеки SDL для Linux
   Для начала проверьте, установлен ли в системе компилятор языка С++ под названием g++ командой:
g++ --version
в консоли. Если получите в ответ номер версии - все Оk, если нет- ставим g++ используя ваш любимый менеджер пакетов (у меня дистрибутив Kubuntu 9.10, но это здесь не так важно, думаю Вы умеете устанавливать пакеты в своем любимом дистрибутиве). Я в большинстве случаев предпочитаю оболочку Synaptic для системы управления пакетами apt (он простой и с GUI). Установить Synaptic, в свою очередь, можно из консоли командой:
$ sudo apt-get install synaptic
Здесь $ печатать не надо, он указывает что работа идет от текущего пользователя а не от администратора root - у него было бы #.

   Запускаем Synaptic (или другое), печатаем в поле "быстрый поиск" g++ и видим, что нам предлагается для установки несколько пакетов. Ставим из предложенного g++ (у меня версии 4.4.1. отмечая чекбокс и нажав зеленую галку "Применить".
   Почитать про GNU GCC: сайт проекта GNU GCC, страничка вики на русском языке.
   Аналогично ставим пакет libsdl1.2-dev (нам пока достаточно его, установить дополнительные расширения библиотеки SDL мы сможем в любое время).
   Почитать про SDL можно тут: сайт проекта, вики на русском языке, цикл статей Евгения aka E$h "Познакомьтесь, SDL", цикл статей (в настоящее время пополняется), на тему SDL и не только, Дмитрия aka dimanche13 статьи по SDL dimanche13.

   Теперь установим кросс-платформенную среду разработки Code::Blocks (страничка википедии на русском и более лиричное, немного устаревшее (2005г.) описание Алёны Сагалаевой). От себя добавлю, что мне эта IDE нравится простотой установки и настройки.
   Synaptic по запросу codeblocks предлагает для установки несколько пакетов. Ставим из предложенного codeblocks (сама IDE) и codeblocks-contrib (набор полезных плагинов для нее).

   Теперь все готово для первого запуска. Стартуем Code::Blocks (далее просто C::B) из Меню запуска -> Приложения -> Разработка (или из консоли командой codeblocks).
   Закрываем окно подсказок. Переднами меню под названием Start here. Проверим как работает компиляция SDL проекта для Linux. Для того, чтобы создать проект смело жмем на значек папки: Create a new project.
   В появившемся окошке New form template выбираем тип проекта SDL project и жмем Go.      Затем в окне SDL project заполняем поля Project title: имя проекта, например, primer (неожиданно, правда), Поле Folder to create project in указывает путь к папке в которой будут храниться наши проекты, у меня это /home/j3d1/proj/Codeblocks/  а Вы сделайте как Вам удобнее. Жмем кнопку Next>. В появившемся окне выбора компилятора и конфигурации оставьте все по умолчанию и нажмите кнопку Finish.
   Вуаля! - проект создан и готов к компиляции.
   Чтобы увидеть код исходника проекта в окне Management (оно слева) раскройте папку Source нажав значок ">" перед ней. Дважды кликните на файле main.cpp - файл и откроется =). "Офигеть! он за нас еще и проги писать будет!", наверное воскликнули Вы? Нет, это всего лишь проект SDL по умолчанию.
   Скомпилируем его, выбрав в меню Build пункт build. Запустим исполняемый файл Build -> Run. Работает? Отлично!
   Но чтобы обеспечить проверку кросс-компиляции мы будем использовать простенький С++ кроссплатформенный код, хорошо компилящийся под эти 3 ОС. Для этого удалите весь исходный код с экрана редактора C::B и вставьте туда вот эту прогу прямо из текста статьи:

#include <cstdio>
#include "SDL.h"
const int SCREEN_WIDTH= 240;
const int SCREEN_HEIGHT= 320;
const int SCREEN_BPP= 16;
Uint16 back_color;
SDL_Surface *screen= NULL;
int main( int argc, char* args[] )
{
   SDL_Init(SDL_INIT_VIDEO);
   screen= SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);
   if(screen== NULL) printf("Unable to SetVideoMode\n");
   else printf("VideoMode settings -Ok\n");
    back_color= SDL_MapRGB(screen->format, 128, 0, 0);
   SDL_LockSurface(screen);
   SDL_FillRect (screen, NULL, back_color);
   SDL_UnlockSurface(screen);
   SDL_Flip(screen); // show screen
   SDL_Delay(3000);
   printf("Quiting SDL...\n");
   SDL_FreeSurface(screen);
   SDL_Quit();
   return 0;
}


Этот исходник подробно прокомментирован в первой статье.
После компиляции и запуска (можете просто нажать F9 -build and run) Вы должны на 3 секунды увидеть поверхность SDL 240х320, окрашенную красным и окно консольного вывода, что очень удобно, правда?:



Для Linux по умолчанию настроены две цели компиляции (Build targets): это Debug и Release:



  До сих пор мы компилировали для target: Debug, переключитеcь на release, постройте проект и запустите его, это удобно делать так-же кнопками "шестеренка" и "пуск" на панели инструментов (см. рис. выше). В чем разница между результатами компиляции Build и Target?   Для Target не запускается консольное окно, т.к. в свойствах (Project-> Properties-> этой цели выставлено Type: GUI applications (вместо Console Application у цели Debug).



   Еще одно различие между ними: сравните размер получившихся исполняемых файлов (они находятся в (/папка проекта/bin/Debug (и Release)/). Разница в размере составляет 8871 байт - это отладочная информация для отладчика gdb. в цели Release она удаляется после компилирования. Это работа флага компиляции [-s].



Project-> Target options-> вкладка Build targets-> выберите цель Release-> нажмите кнопку Build options (см. рис. выше). Откроется окошко (см. рис. ниже), в свойствах компилятора есть строка Strip all symbols..... этот ключ компиляции [-s] и отвечает за удаление отладочной информации из исполняемого файла. Ознакомьтесь с другими активными и неактивными ключами компиляции. Подробнее узнать о них Вы можете в документации на компилятор GCC.


  
   Только что мы узнали о настройках целей компиляции (targets). Для каждой цели, как Вы видите, можно задать свои опции компилера, линкера и пути поиска подключаемых хедеров и библиотек. Но существуют так-же и глобальные настройки компилятора, которые мы еще не смотрели.
   Предлагаю сделать это, а заодно настроим компилятор для Windows под названием MinGW.
   Упс, небольшая поправка, удалите картинку cb.bmp из проекта (см. рис. ниже) нам она не понадобится.



   Добавляем компиляцию для target (целевой платформы) Windows
  Наш исходный код (файл main.cpp) без переделок может быть скомпилирован и под Windows. Для этого применим компилятор MinGW  (Minimalist GNU for Windows) http://www.mingw.org. MinGW обеспечивает нативную функциональность и производительность посредством прямых вызовов Windows API и хорошо подходит для компиляции кроссплатформенных библиотек подобных SDL и приложений c их использованием.
Установим MinGW в нашу систему. Самый простой путь – установить из менеджера пакетов. Ставим пакет mingw32 (он потянет за собой runtime и binutils).

    Теперь скачаем и установим SDL для MinGW. Тут менеджер пакетов нам не помощник — надо руками. Скачиваем отсюда: http://www.libsdl.org/download-1.2.php




Распаковываем полученный архив (я не мудрствовал и сделал это прямо их контекстного меню архива). Переходим в mc в этот архив (так чтобы видеть файл Makefile), гасим панели,Ctrl-O, в консоли становимся рутом у меня
$ sudo su
затем устанавливаем SDL для mingw32
# make cross
выводом этой команды будут много строк копирования (со знаком → в середине). Кстати посмотрите куда кладутся .h и .a файлы, там же увидите где потом взять SDL.dll чтобы положить его в папку с .exe файлом (который мы скоро создадим).
   Ок, все готово для настройки компиляции под Windows в C::B.
   Перейдите в меню Settings-> Compiler and debugger (рис. ниже).



Выбираем GNU GCC Compiler и жмем кнопку Copy - ведь настраивать свой mingw32 компилятор мы будем на основе GCC. Зададим имя для нашего компилятора:



Потом выскакивает окно с напоминанием настроить тулчайн для только-что созданного компилятора. Конечно настроим =) Выберите вверху окна наш только-что созданный компилятор. Compiler settings не трогаем, а вот в Linker settings впишите имена необходимых нам библиотек (рис. ниже):



Теперь добавим (Add) пути Compiler'a, Linker'a и Resource compiler'a (три рис. ниже):







Наконец, настроим Toolchain executables (помните напоминание):



Настройте, выбирая в директории /usr/bin/ После выбора recource compilera (он последний, т.к. make не трогаем), нажмите кнопку Auto detect. Она должна дать путь /usr как на рисунке.
   Вкладку Custom variables не трогаем, а вот во вкладке Other settings для Compiler logging выбираем Full command line (см. рис ниже):


  
   Этот пункт требует вывода полной строки в Build log при компиляции, и если что-то не пойдет с настройкой Вы всегда можете спросить у знающих товарищей, или разобраться сами, используя этот лог.
   Вот и все с глобальными настройками, жмем кнопку Ок.

   Теперь создадим и настроим новую цель компиляции.
   Для этого перейдите Project-> Properties-> вкладка Build targets, выберите цель Release, на ее основе будем делать свою цель для Windows. Нажмите кнопку Add и впишите имя новой цели (см. рис. ниже):


  
Теперь внимательно заполните поля для новой цели: Type (тип проекта), Output filename (имя выходного файла), Object output dir (директория для объектных файлов).


  
Теперь нажмите кнопку Build options и сразу же выберите для новой цели наш новый компилятор. Затем перейдите на вкладку Linker settings и пропишите вызываемые библиотеки. Примечание: libmingw32 должна линковаться перед библиотеками SDL (поэтому она здесь):



Во вкладке Search dir пропишите где искать хедеры и либы SDL:







   В конце нажмите Ok, выберите нашу только что созданную цель (Build target: win32_release) и попробуйте скомпилировать екзешник. Не забывайте, чтобы Ваше SDL приложение работало, в папку с экзешником (у меня это /home/j3d1/proj/Codeblocks/primer/bin/win32_release/) нужно положить библиотеку SDL.dll. Возьмите ее отсюда: /usr/local/cross-tools/i386-mingw32/bin/.
   Компиляцию для Windows мы с Вами настроили. Вот и ладненько, теперь идем дальше.

   Добавляем target WinCE
   На этот раз все еще проще. Для компиляции будем использовать GNU gcc (cegcc) — именно его разновидность -компилятор mingw32ce, обеспечивающий нативный код под WinCE. Для данной платформы воспользуемся библиотекой SDL 1.2.6 c патчем от Arisme скачать все это можно с этой странички. Но Вы можете поступить проще - скачать архив, который содержит уже установленные mingw32ce и пропатченную под WinCE SDL. Вам останется только разархивировать и разнести по папкам файлы из opt в /opt а из usr в /usr (конечно, переносим файлы из-под рута). И все. Для начала нам этого вполне хватит.
 
   Подключим тулчайн для wince. За основу, как и в случае с MinGW возьмем настройки компилятора GCC. Перейдите в меню Settings-> Compiler and debugger (рис. ниже). Выберите компилятор GNU GCC:


  
Теперь жмем кнопку Copy и вписываем имя нашего компилятора для WinCE



Во вкладке Compiler Settings -> Other options отключаем поддержку исключений (если не отключать, то придется таскать с экзешником библиотеку libstdc++-6.dll почти мегабайт весом). Подробнее про это можете прочесть на сайте проекта cegcc.



Вкладку Linker оставляем без изменения, открываем вкладку Search directories и заполняем в ней вкладку Compiler:



Заполняем данные во вкладке Toolchain executables



Настройте, выбирая в директории /usr/bin/ (там у нас размещены символические ссылки на файлы компиляторов и утилит для mingw32ce (Вы же их туда скопировали, не так ли?). После выбора linker'a static libs (он последний), нажмите кнопку Auto detect. Она должна дать путь /usr т.е. как на рисунке.

Теперь во вкладке Other Settings в Compiler logging выставим Full command line, как и при настройке MinGW:


  
На этом настройка глобальных опций компилятора для wince закончена. Жмем Ok.

Теперь создадим цель компиляции для wince. Для этого перейдите Project-> Properties-> вкладка Build targets, выберите цель Release (Именно Release а не win32_release), на ее основе будем делать свою цель для Windows. Нажмите кнопку Add и впишите имя новой цели (см. рис. ниже):



Теперь внимательно заполните поля для новой цели: Type (тип проекта), Output filename (имя выходного файла), Object output dir (директория для объектных файлов):



Жмем вкладку Build options для нашей цели.
Ниже, во вкладке Compiler пропишем путь к хедерам SDL:



Перейдем в Linker укажем для линковки libSDL следующее:



Жмем Ok, выбираем нашу только что созданную цель компиляции Build target: wince_release и компилируем наш исходник для wince. SDL.dll для него не потребуется, т.к. библиотека прилинкуется статически (войдет в exe файл). Использование статически прилинкованной библиотеки SDL накладывает на нас определенные обязательства: мы имеем право использовать SDL в таком виде только в свободных проектах. Подробнее об использовании этой библиотеки читаем здесь.
   Теперь рассмотрим простую отладку для Linux.

   Минимально необходимая отладка исполняемого файла для платформы Linux
  
Не воспользоваться возможностями Code::Blocks для отладки было бы неправильно. Рассмотрю минимальную отладку под Linux (с отладкой под другие ОС я просто пока не разбирался). Минимальной отладкой я считаю отслеживание значений переменных в ходе выполнения программы. Давайте отследим какое значение принимает в программе переменная back_color.
   Для начала настроим макет отображения для отладки, чтобы в дальнейшем выбирать его двумя щелчками мыши. Сейчас мы работаем в макете редактора по-умолчанию - Code::Blocks default можете убедиться в этом выбрав View-> Layouts:



В меню File пункт Save everything - сохраним результаты работы.
Далее, для того, чтобы добавить окно отладки выберите Debug-> Debugging window-> Watches (слежение):



Перенесите полученное окошечко на уровень тулбара и отпустите (C::B при этом иногда падает, так что не пугайтесь, Вы же только-что сохранились). Должно получиться так:



Теперь сохраним полученный макет с именем Debugging и перейдем на него:



Выберите цель компиляции- Debug, скомпилируйте проект и поставьте точку останова (breakpoint) ниже инициализации переменной back_color:


Запустите отладку нажав Debugging/Continue, или выбрав Debug-> Start. Отладка остановится на нашей breakpoint. Теперь наведите курсор на переменную back_color, нажмите правую кнопку мыши и выберите в контекстном меню Watch 'back_color':



Вы видите как в окне Watches появилась переменная back_color и ее значение:



   Далее Вы можете проболжить отладку (Continue) или завершить ее (Stop debugging).
   Теперь для написания кода можно пользоваться макетом С::B default а для отладки макетом Debugging. Создавайте макеты (layouts) на свой вкус (благо для одной только отладки есть окна Breakpoints, Call stack, CPU Registers, Disassembly, Examine memory, Running threads и, известный нам, Watches).

   Заключение

   Вот мы и научились (в общих чертах) подключать компиляторы к свободной IDE Code::Blocks и краем глаза взглянули на отладку=). Я еще не разобрался как сделать шаблон такого кросс-платформенного проекта, чтобы его можно было выбирать из меню создания проекта. Пока пользуюсь настроенным минимальным SDL решением (просто для нового проекта копирую эту папку и в ней уже пишу дальше).
   Если в ходе настройки у Вас появились вопросы, предложения, поправки и дополнения к статье - пожалуйста оставляйте комментарии или пишите на e-mail j3d1adm1n@yandex.ru. Надеюсь, эта статья была Вам полезна.
Категория: SDL и C/C++ | Добавил: J3d1 (27.01.2010)
Просмотров: 17408 | Комментарии: 5 | Теги: SDL, кросскомпиляция, WinCE, Кросс-компиляция в Linux | Рейтинг: 5.0/1
Всего комментариев: 5
1 J3d1  
0
Упс, только что заметил: в настройках компилятора для wince необходим ключ -fno-exceptions. Статью поправлю сегодня вечером.
/// Статья исправлена 01.02.10////

2 anonymous  
0
Спасибо, очень хорошая статья.

3 WOLF  
0
Вроде всё сделал, но...

4 J3d1  
0
Hi, Wolf! Похоже, что SDL не прилинковалась. Проверьте еще раз настройку компилера и линкера для цели wince. Если ошибок нет и все равно не компилируется, то попробуйте как здесь: http://slil.ru/28622499
В архиве мои настройки и простой проект. Прошу выслать Ваш проект на "посмотреть". Удачи.

5 MarvelTM  
0
А можно Borlard С++ v3.1 также настроить если можно то как ...

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Друзья сайта
  • Все для веб-мастера
  • Программы для всех
  • Мир развлечений
  • Лучшие сайты Рунета

  • Copyright MyCorp © 2024 Создать бесплатный сайт с uCoz