[powrót]

Kompilacja programów z PGK pod Windowsem

Dev-C++ to chyba najłatwiejsza metoda kompilacji pod Windowsem, no i ciągle open-source'owa. Ściągnij stąd. Jeśli nie wiesz którą wersję ściągnąć to znaczy że chcesz pierwszą wersję, Dev-C++ 5.0 beta 9.2 (4.9.9.2) (9.0 MB) with Mingw/GCC 3.4.2.

Programy używające GLUTa

  1. Używając oryginalnego gluta:

    1. Dodać pakiet gluta dla DevCpp
    2. Dodac do opcji linkera
      -lglut32 -lglu32 -lopengl32 -lwinmm -lgdi32
  2. Używając freeglut:
    1. Dodać pakiet freegluta dla DevCpp
    2. Zmienić include GL/glut.h na GL/freeglut.h, lub utworzyc w podkatalogu include/ instalacji DevC++ (lub MinGW jesli MinGW instalowaliscie osobno) trywialny plik glut.h
        #ifndef  __GLUT_H__
        #define  __GLUT_H__
        #include "freeglut_std.h"
        #endif /* __GLUT_H__ */
      
    3. Dodac do opcji linkera
      -lfreeglut -lglu32 -lopengl32 -lwinmm -lgdi32
      I do opcji kompilatora
      -DFREEGLUT_STATIC

Zwracam uwagę że glut i freeglut mogą "koegzystować" razem, nie wadząc sobie, więc można zainstalować oba i używać dowolnego (o ile nie wykonamy sztuczki z trywialnym plikiem glut.h dla freegluta). Na początek naprawdę nie ma znaczenia czy wybierzecie oryginalnego gluta czy freegluta — oba działają równie dobrze.

Skąd wymyślam odpowiednie opcje kompilatora i linkera ? Patrzę na pliki w <dev-cpp-path>/Templates/*.template. Tam są przykładowe programy używające odpowiednich pakietów DevCpp i zapisane są odpowiednie opcje kompilacji.

Programy używające SDLa

Są wprawdzie devpaki dla SDLa na http://devpaks.org/ ale nie działały mi. Nie wchodziłem w szczegóły dlaczego, zamiast tego zrobiłem wszystko ręcznie:

  1. Ściągnij SDLa (z sekcji "Development Libraries" dla Win32 na MinGW32).
    • Rozpakuj bin/SDL.dll do katalogu ze źródłami (jest potrzebne do uruchamiania).
    • Rozpakuj lib/ do <dev-cpp-path>/lib/
    • Rozpakuj include/* do <dev-cpp-path>/include/SDL/*
  2. Kompiluj z opcjami linkera:
    -lmingw32 -lSDLmain -lSDL -lglu32 -lopengl32 -lwinmm
  3. Acha, trzeba wyrzucić
      #include <GL/glu.h>
      #include <GL/gl.h>
    
    i dodać
      #include <SDL/SDL_opengl.h>
    
    na początku (albo ściągnąć pliki źródłowe od nowa z tej strony).

Programy używające SDL_image

Programy używające GLFW

(Na pracowni nie bawiliśmy się biblioteką GLFW, ale jesli ktoś lubi to jak najbardziej można z niej korzystać zamiast GLUTa lub SDLa).

Próbowałem prostej metody:

Więc uznałem że należy skompilować wszystko samemu. Kompilacja spod Cygwina (żadnego MinGW) przez `make win32-cygwin' działa znakomicie, tworzy binarkę i odpowiednie przykłady.

Kompilacja przez MinGW:

  1. MinGW musi być na $PATH (jeśli zainstalowales DevCpp razem z MinGW to MinGW bin jest tam gdzie DevCpp). Z normalnej konsoli Windowsa (*nie* z shella MSys lub co gorsza Cygwina) uruchom `make win32-mgw'. Pamiętaj żeby nie mieć różnych wersji gcc na ścieżce. Wyprodukuje to odpowiednie biblioteki w <glfw-path>/lib/win32/ oraz skompiluje przykłady w <glfw-path>/examples/.
  2. Aby kompilować z DevCpp używając MinGW trzeba jeszcze skopiować <glfw-path>/lib/win32/libglfw.a do <dev-cpp-path>/lib/.
  3. Opcje linkera w DevCpp to
    -lglfw -lopengl32 -lglu32

Jakoś nie udało mi się zmusić dynamicznego glfw.dll do działania (a próbowałem, libglfwdll.a i glfw.dll mam skompilowane OK, ale jakoś żadne opcje kompilacji z -dGLFW_DLL i -lglfwdll nie działają).

Programy używające GFL

(Na pracowni nie bawiliśmy się biblioteką GFL, ale jesli ktoś lubi to jak najbardziej można z niej korzystać zamiast SDL_image).

Patrz tutaj.