06.01.10 14:28 NeonLight_Child

Linux GamesКомпиляция своих линуховых игр для венды

Игры, которые я пишу для линуха, теперь стало возможным компилировать для/в венде. Большое Спасибо Tamahome с форума gamedev.ru. В своих играх я использую связку из С++ + SDL + OpenGL. Для компиляции игры в *.exe для, делаем следущее:

1)В начале *.cpp файла программы добавляем:
1
2
3
4
5

    #ifdef __WIN32__
    #include <windows.h>
    #endif
 

далее, ищем функцию main() и меняем ее на:
1
2
3
4
5
6
7
8
9
10

    #ifdef __WIN32__
    int WINAPI WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow){
    #else
    int main(int argc, char **argv){
    #endif
 

Все, теперь один и тот же текст программы можно компилировать и в вайне/винде (об этом ниже), и, по старому-через команду make в линухе.

2) Для компиляции программы в *.exe в линухе я установил wine (для компиляции в венде, вероятно, все следущие действия будут аналогичными). Многие скажут, что, дескать вайн не ТРУ, но вайн всеравно будет необходим для последущей проверки результата компиляции.

3) Качаем вендовую IDE+gcc отсюда:http://downloads.sourceforge.net/codeblocks/codeblocks-8.02mingw-setup.exe. Под вайном это IDE заводится без проблемм. Под линем работать в ней мы не будем (я предпочитаю geany), а, вот, для компиляции *.exe использовать-самое оно. А в венде для работы ее можно использовать.

4) После, идем на http://www.libsdl.org/projects/ и качаем SDL-ные библиотеки. Я скачивал эти (они не все нужны, просто "чтобы было"):

SDL_Cbs, SDL_image, SDL_mixer, SDL_net, SDL_rtf, SDL_ttf.

Качаем все это из подразделов Binary/Win32. На примере SDL_mixer - это выглядит так: SDL_mixer-1.2.11-win32.zip(это bin) и SDL_mixer-devel-1.2.11-VC.zip (это devel).Не обращаем внимания, если написано что хедеры для VC. На самом деле все подходит без всяких правок. Расспаковываем. Из bin-ов, в последствии, будем набирать необходимые dll для скомпиленного в *.exe проекта (ложить в папку проекта).А в devel-е обычно находятся папки include и lib, их необходимо скопировать в соответствующие папки в %HOME FOLDER%/.wine/drive_c/Progrаmm Files/CodeBlocks/MinGW.

5) Теперь, качаем саму SDL. Идем на http://www.libsdl.org/download-1.2.php и качаем из подраздела Development Libraries/Win32 что-то, похожее на это, SDL-devel-1.2.14-mingw32.tar.gz (Mingw32). Также, оттуда подбираем необходимую SDL.DLL для нашего будущего проекта: подраздел Runtime Libraries/Win32, SDL-1.2.14-win32.zip (ложим в папку проекта). Расспаковав SDL-devel-1.2.14-mingw32.tar.gz, видим, что это один в один папка MinGW. Дополняем НАШУ MinGW этим содержимым.

6) Теперь, запускаем вайновый CodeBlocks. Открываем наш *.cpp проект. Перед его компиляцией в *.exe необходимо подлинковать нужные либы (действие, аналогичное созданию make файла для компиляции в лине). Для этого ползем к верхним менюшкам.
Settings->Compiler and Debuger->откроется окно, по умолчанию в нем стоим на разделе Global Compiler Settings-> вкладка Linker Settings->кнопка Add под левой колонкой->кнопка с тремя точками->нас просят указать нужные библиотеки, идем в папку Codeblocks/MinGW/lib/, и, удерживая Ctrl, выбираем следущие либы:

SDL_image.lib, SDL_mixer.lib, SDL_ttf.lib, libSDL.dll.a, libSDLmain.a, libopengl32.a, libglaux.a, libglu32.a, libglut.a, libglut32.a.

Возможно среди этих библиотек есть лишние.

7)Теперь возможна компиляция проекта в вендовый *.exe - кнопка с шестерней Build или Ctrl+F9. Все, exe готов.

В качестве примера, можно посмотреть последнюю версию SwibPlex.



NeonLight_Child 06.01.10 14:39 # +1
и за что минусуют?
booley 06.01.10 15:20 # +2
Нет ли в 1) ошибки?
#include <здесь_должно_быть_что-то,имхо>

Какие еще игры, кроме Свибплекса? Стало интересно.
NeonLight_Child 06.01.10 19:25 # +1
Еще делал бомж сурвайвер-надо не дать расстащить кучу припасов.
Последняя версия здесь:http://narod.ru/disk/16546912000/v7.zip.html
Еще есть зачатки карточной игры на основе ККИ "Берсерк", но это только зачатки.
Еще делаю какойто скрул шутер =)
NeonLight_Child 06.01.10 19:35 # +0
спасибо поправил там должно быть
#include
NeonLight_Child 06.01.10 19:37 # +0
#include скобка windows.h скобка, скобки и то что между ними не пишется-хтмл теги:(
predator 06.01.10 15:47 # +1
спасибо, очень интересно
predator 06.01.10 15:48 # +2
может продолжите писать про game dev для линукса может кто заинтересуется и под линукс появится большее интересных игр
Jazz 06.01.10 15:58 # +1
gamedev.ru никогда не заменит ни id Software, ни Epic Games :)
Username 07.01.10 16:12 # +0
ни матьего Valve :(
booley 06.01.10 16:01 # +0
Я заинтересовался :)
Если желание не пропадет, может что-нибудь и сделаю.
NeonLight_Child 06.01.10 19:25 # +0
попробую =)
NeonLight_Child 06.01.10 19:30 # +1
Если эта тема интересна,то о ней уже можно почитать. Например, есть электронный журнал lingametech, начиная со второго номера, они пишут о создании игр на Си с использованием SDL и OpenGL. Что, в принципе, я и делаю.
Jazz 06.01.10 15:56 # +0
Не совсем понял, о чём статья. По сути все пункты кроме первого не имеют отношения к кросскомпиляции.

%username% love BDSM!

Jazz 06.01.10 17:47 # +0
Наверное, потому что это инструкция по сборке sdl-приложения под Windows, а сайт называется welinux. Или я что-то упустил?
Jazz 06.01.10 17:50 # +0
Даже, чтобы предупредить непонимание, сборка sdl-приложения под Windows с использованием windows-библиотек и windows-компилятора.
NeonLight_Child 06.01.10 19:34 # +0
Просто я был заинтересован в этой теме. В свое вреемя я не нашол этого материала, когда он был необходим. Я думаю, что процесс кросскомпиляции в линуховом code::blocks будет аналогичным. Если есть вайн, то почему его нельзя использовать для компиляции виндовых приложений?
galaxyman 06.01.10 21:36 # +0
спасибо за статью и наводку на lingametech
NickNill 06.01.10 21:53 # +0
и это все что нужно?а если там не только ехе, а и либы еще и т.п?
NeonLight_Child 06.01.10 22:09 # +0
а dll разве не либы?
NickNill 06.01.10 23:09 # +0
я имею ввиду если игра не с одного ехе состоит, то все-равно больше ничего не надо изменять?
NeonLight_Child 06.01.10 23:29 # +0
Не совсем понял о чем ты, может пример приведешь? По-моему, надо править только файл *.cpp проекта, остальные-не трогаем. А раз в проекте один cpp, то и exe будет только один.
NickNill 06.01.10 23:59 # +0
в папке с игрой обычно куча всяких dll. ехе то ты скомпилишь, а dll? или оно все в ехе слинкует?
NeonLight_Child 07.01.10 00:31 # +0
не туда ответил(
NeonLight_Child 07.01.10 00:30 # +0
Посмотри 4). Там пример есть с SDL_mixer, архив с названием SDL_mixer-1.2.11-win32.zip содержит файл DLL-ки необходимые для работы библиотеки SDL_mixer. Эти DLL подкидывать в папку к exe-шнику. Я так понял, exe-шник после компиляции уже будет знать об их существовании.
NickNill 07.01.10 22:27 # +0
а если ты делаешь собственные?
NeonLight_Child 07.01.10 23:32 # +0
насчет собственных dll ничего сказать не могу, ни разу их не делал
Посты Комментарии
Последние посты
Посты Комментарии
Последние комментарии
Посты Комментарии
Изменения
Посты Комментарии Изменения Черновики Избранное
Черновики (все)
Посты Комментарии Изменения Черновики Избранное
Избранное (всё)
Посты Комментарии Изменения Черновики Избранное
Лучшие блоги (все 127)
Элита (все 2421 из 196 городов)
welinux.ru