본문 바로가기

C/C++/SDL2

Code::Blocks - SDL2 셋팅

프레임워크와 라이브러리의 차이...

https://kldp.org/node/124237

http://ohgyun.com/288



참고자료:  프로그래밍의 숲

               유투브

   http://pjc0247.blog.me/80158701932

            



1. SDL 라이브러리 구하기


SDL 공식 홈페이지에 가면 SDL 라이브러리를 구할 수 있습니다.


https://www.libsdl.org/index.php 일단 여기로 들어가시면 위 사진과 같은 화면 좌측 하단에 보이는


Download 항목의 SDL 2.0 을 클릭합니다.







우리는 SDL을 사용해서 개발을 할 것이기 때문에, 저희에게 필요한건 SDK 혹은 Development Library 입니다. 


Development Library 의 항목을 보시면 운영체제 별로 나눠져 있는데 


Code::Blocks의 경우 Mingw32 라이브러리를 사용합니다.  따라서  SDL2-devel-2.0.3-mingw.tar.gz 을 클릭하셔서 다운받습니다.









방금 받은 것은 sdl 의 기본 기능만 들어있는 라이브러리이기 때문에 그림을 그리거나 음악을 재생하실려면


추가적으로 SDL_image 와 SDL_mixer 라는 라이브러리를 다운받으셔야 합니다.


https://www.libsdl.org/projects/ 에 들어가시면 받으실 수 있습니다. 


======================================================================================================================



======================================================================================================================


======================================================================================================================

아까도 설명했듯이 Code::Blocks의 경우 Mingw32 라이브러리를 사용합니다. ( MinGW 버전을 다운받습니다.. )







모두 다운받으셨으면 영어이름의 적당한 새 폴더를 만들고  (저 같은 경우는 sdl_mingw 라는 이름의 폴더를 만듬)


폴더 안에 다운 받은 녀석들을 모두 넣어줍니다.


(꼭 영문 이름으로 만드셔야 합니다...  한글 경로는 code::blocks이 인식 못할 수도 있음...)







그리고 그 안에 압축을 모두 풀어줍니다.





이제  준비된 sdl_mingw 폴더를  


C 드라이브나 D드라이브든 원하시는 찾기 편한 곳에 둡니다.


그럼 이제 sdl 라이브러리를 사용할 준비가 되었으니  Code::Blocks를 실행시킵니다.






SDL 을 사용해볼 새로운 프로젝트를 한번 만들어 봅시다.


메뉴의 File -> New -> Project 를 선택합니다. 







그 뒤, 프로젝트 종류에서 Empty Project (빈 프로젝트) 를 선택하고  Go 버튼을 누룹니다.







그냥 나오는 옵션 생성 마법사 인데, 일단 next를 누릅니다.







그 뒤,  Project title 에는 여러분이 원하는 프로젝트 이름을 설정하고   (저는 First 라고 지었습니다)


Folder to create project in 에 프로젝트가 생성될 위치를 설정해 줍니다.  (저는 바탕화면에 뒀습니다...  절 굳이 따라하진 않아도 됩니다!!)







그 뒤에 나오는 항목은 컴파일러 설정인데, 기본값으로 자동으로 설정되어 있으니 그대로 놔두시고 Finish 를 누릅니다.







이제 프로젝트가 만들어 졌으니 소스 파일을 하나 만듭시다. 


File -> New -> Empty file 을 누릅니다.









그러면 위와 같은 대화상자가 나오는데, 프로젝트에 추가한다는 의미니 '예'를 눌러줍니다.







그리고 추가할 소스파일의 이름을 설정하고 저장합니다. (저는 main.cpp 라고 이름을  정했습니다.)








그러면 위와 같이 타겟을 설정할 수 있습니다. 


Code::Blocks 에서는 비주얼 스튜디오와 같이 디버그 모드와 릴리즈 모드를 나눌 수 있는데,


두 타겟 모두에서 사용해야 될 파일이므로  Select All 버튼을 누르고 OK를 누릅니다.









이제 왼쪽의 Management 항목에  Projects 탭 아래에 있는, 저희가 방금 만든 프로젝트인  


First 에다 마우스 오른쪽 버튼을 클릭하고 Build options 버튼을 누룹니다.






그러면 위와 같은 Project build options 라는 대화상자가 나오는데 


여기서 이제 우리가 사용할 라이브러리가 어느 폴더에 있는지 적어줘야 합니다.  


Search directories 탭의 Compiler 탭에 들어가신 뒤 Add 버튼을 누룹니다.


아직 Add 에 아무것도 입력하지 마시고...






우리가 전에 압축을 풀어놓은 3개의 라이브러리 폴더가 있을겁니다. 


이중 


SDL_2-2.0.3 폴더에서  i686-w64-mingw32 -> include -> SDL2  폴더까지 들어갑니다.  


(참고로 i686-w64-mingw32 는 32비트용,  x86_64-mingw32 는 64 비트용 라이브러리입니다. 

 우리는 32비트용으로 개발 할 것이기에  i686-w64-mingw32...를 선택했습니다.)




그러면 위와 같이 헤더파일이 무수 히 많을 텐데 위 사진의  붉은 부분으로 친 주소부분을  Ctrl + C  복사하시고

(참고로 제 스샷의 경로를 동일하게 입력하시면 안됩니다... 여러분은 여러분이 놓은 파일의 위치가 저와는 다를테니 말이죠
여러분이 놓은 파일 위치 주소를 고대로 복사하시면 됩니다!!)
 





그리고 이 주소를 방금전의 Add 에  Ctrl + V 붙여넣기 하기고 OK 버튼을 누릅니다.....






그러면 이렇게 경로가 등록이 됩니다...


이러한 식으로  Compiler 탭에 sdl_mingw 폴더에 있는 나머지  


SDL2_image-2.0.0 폴더에서 ->i686-w64-mingw32 ->include -> SDL2     


SDL2_mixer-2.0.0 폴더에서 -> i686-w64-mingw32->include->SDL2    


두 폴더도 Add로 경로를 등록해줍니다.




자 이제 이렇게 Compiler 탭에 헤더파일 경로를 다 등록해 줬으면 


마지막으로 Linker 탭에 라이브러리 경로를 등록해줘야합니다.






자 Linker 탭에 들어 온 다음 아까와 같이 Add 버튼을 누르고 


아까  처럼 경로를 복사 붙여넣기 해주면 된다 이번에는 









SDL2-2.0.3 폴더의 -> i686-w64-mingw32 ->lib 


SDL2_image-2.0.0 폴더의 -> i686-w64-mingw32 ->lib


SDL2_mixer-2.0.0 폴더의 -> i686-w64-mingw32-> lib


위 3개 폴더의 경로를 등록해 주면 됩니다.




자 여기까지의 작업은 우리가 사용할 SDL이란 라이브러리가 어느 폴더에 있는지 경로를 컴파일러에 알려주는 과정이였고


위치 등록이 끝났으니 이제  우리가사용할 SDL 라이브러리를 컴파일러에게 등록하면됩니다!!!


마지막으로  




Linker settings 탭의  Other linker options 부분에 우리가 사용할 라이브러리들의 이름을 적어줍니다.


-lmingw32 -lSDL2main -lSDL2 -lSDL2_mixer -lSDL2_image  을 적어주고  OK를 누르면된다... 


(libSDL2man.a ,  libSDL2.a, libSDL2_mixer.a, libSDL2_image)




참고로 lib 폴더에 들어가 보면 확장자가 .a 파일들이 있는데 이것이 라이브러리이다...  


헤더파일은 단지  함수나 자료형 클래스등이 선언되어 있는 것이고 이 라이브러리가 실체가 정의가 바이너리코드로 저장된 곳이다.


.a 파일들 이름 앞에 lib 라고 되어있는데 이것을  Other linker options에 등록시에는 -l 로 표기한다.     (lib 은  -l)






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <SDL.h>
#include <stdio.h>
 
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
 
int main(int argc, char *args[])
{
    SDL_Window* window = NULL;
 
    SDL_Surface* screenSurface = NULL;
 
    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        printf("SDL could not initialize! SDL_Error: %s\n",SDL_GetError());
    }else
    {
        window = SDL_CreateWindow("SDL Tutorial",
                                SDL_WINDOWPOS_UNDEFINED,
                                SDL_WINDOWPOS_UNDEFINED,
                                SCREEN_WIDTH,
                                SCREEN_HEIGHT,
                                SDL_WINDOW_SHOWN);
        if(window == NULL)
        {
            printf("Window could not be created! SDL_Error: %s \n",SDL_GetError());
        }else
        {
            screenSurface = SDL_GetWindowSurface(window);
 
            SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format,0xFF,0xFF,0xFF));
 
            SDL_UpdateWindowSurface( window );
 
            SDL_Delay( 2000);
        }
    }
 
    SDL_DestroyWindow( window);
 
    SDL_Quit();
 
    return 0;
}



이제 준비가 다 되었으니  위의 소스코드를 똑같이 적고 


빌드를 해보자...  (빌드  ctrl + f9  )


그러면 







위와 같은 


fatal error: winapifamily.h: No such file or directory 라는 에러가 뜰 것이다....  (안뜨면 상관없고)


놀라지 말자 자연스러운 거다 이 에러는 SDL 2.0.3 버전에서 발생되는 버그라고 한다... 


다음 버전에서는 이 버그를 고쳐준다고 한다....


만약 위 버그가 아직도 발생하는 사람은 







SDL_platform.h


지금 내가 첨부한 위 파일을 다운받아서 


SDL2-2.0.3 폴더의 -> i686-w64-mingw32 -> include -> SDL2 폴더에 집어넣어라 파일 덮어쓸꺼냐고 물어보면 덮어쓴다고 해라


그리고 다시 빌드하면 빌드에 성공할 것이다... 





빌드를 성공시키고  Ctrl + f10  프로그램을 실행시킬려고 하면 위와 같은 오류가 뜨는데  이것은 







sdl2-2.0.3 폴더에서 -> -> i686-w64-mingw32 ->bin  폴더에 들어가면 


SDL2.dll 이란 파일이 있는데 이 파일을 복사한 뒤 (Ctrl + C)







 여러분이  Code::Block 으로 만든 프로젝트 폴더안의  


bin 폴더에서 -> debug  폴더 안에  




SDL2.dll 파일을 넣고  다시 실행하면 잘 동작할 것이다. 






실행결과는 위 영상 처럼


그냥 흰색 윈도우창이 약 2초간 아무 일도 없이 가만히 있다가 꺼지는 


심심한 프로그램이다.... 




아직 위의 코드는 몰라도 된다. 


앞으로 하나 하나 자세히 알아보자  오늘은 여기까지... 

'C/C++ > SDL2' 카테고리의 다른 글

SDL에 대하여 (About SDL)  (0) 2016.11.12
1장 Hello SDL  (0) 2015.05.25
00장. 게임 프로그래밍 첫 걸음  (0) 2015.05.25
Visual Studio 2013 - SDL2 셋팅  (3) 2014.08.28
SDL 소개  (0) 2014.08.27