cocos2d-x android 개인 프로젝트 빌드를 위해 수정, 추가할 것들

자동 생성되는 HelloWorldScene를 쓰시는 분들은 없겠죠? 물론 쓰신다면 남겨두어야 하겠지만, 이 포스팅에서는 안 쓰는 것을 전재로 설명합니다.

일단 Classes 폴더에서 필요없는 HelloWorldScene의 cpp와 h 파일을 지웁니다.

proj.android/jni/helloworld/main.cpp 에서 #include "HelloWorldScene.h"를 삭제하고 #include "cocos2d.h" 를 추가합니다.

다음으로 proj.android/jni/Android.mk 파일을 수정해야합니다.

LOCAL_SRC_FILES 파일에서 ../../Classes/HelloWorldScene.cpp 부분을 삭제합니다. 그리고 Win32환경에서 개발했던 source, resource를 복사 후 빌드 전 역시나 LOCAL_SRC_FILES 부분에 개발했던 cpp 파일들을 추가해 줍니다.

../../Classes/GameState/TitleState.cpp \

이런식으로 말이죠. 마지막 추가에는 \ 빼시구요. 만약 추가 없이 빌드를 하면 아래와 같은 에러 메세지를 뿜어냅니다.


SharedLibrary  : libgame.so
./obj/local/armeabi/objs-debug/game_shared/__/__/Classes/AppDelegate.o: In function `TitleLayer::create()':
C:\Android\cocos2d-2.0-rc2-x-2.0.1\projectc\proj.android/jni/../../Classes/TitleState.h:17: undefined reference to `TitleLayer::TitleLayer()'
./obj/local/armeabi/objs-debug/game_shared/__/__/Classes/AppDelegate.o: In function `~AppDelegate':
C:\Android\cocos2d-2.0-rc2-x-2.0.1\projectc\proj.android/jni/../../Classes/AppDelegate.cpp:26: undefined reference to `DataTableManager::purgeDataTableManager()'
C:\Android\cocos2d-2.0-rc2-x-2.0.1\projectc\proj.android/jni/../../Classes/AppDelegate.cpp:27: undefined reference to `RankingManager::purgeRankingManager()'
./obj/local/armeabi/objs-debug/game_shared/__/__/Classes/AppDelegate.o: In function `AppDelegate::applicationDidFinishLaunching()':
C:\Android\cocos2d-2.0-rc2-x-2.0.1\projectc\proj.android/jni/../../Classes/AppDelegate.cpp:50: undefined reference to `GameStateManager::sharedGameStateManager()'
C:\Android\cocos2d-2.0-rc2-x-2.0.1\projectc\proj.android/jni/../../Classes/AppDelegate.cpp:50: undefined reference to `GameStateManager::createGameState(char const*, char const*, cocos2d::extension::CCNodeLoader*, bool)'
collect2: ld returned 1 exit status
/cygdrive/c/Android/android-ndk-r8b/build/core/build-binary.mk:378: recipe for target `obj/local/armeabi/libgame.so' failed
make: *** [obj/local/armeabi/libgame.so] Error 1
make: Leaving directory `/cygdrive/c/Android/cocos2d-2.0-rc2-x-2.0.1/projectc/proj.android'

특이사항이 없다면 위와 같이 후 빌드가 성공합니다. 다음은 샘플처럼 이클립스에서 불러와 진행하면 됩니다.

추가로 아래 처럼 에러가 나올 수 있습니다.


fatal error: CCArray.h: No such file or directory
fatal error: CCObject.h: No such file or directory

등등등 여러 에러 메세지가 나올 수 있는데 cocos2d-x의 샘플은 모두 편하게 cocos2d.h 를 include했지만 저는 필요한 파일만 include해서 개발했더니 저런 에러가 뜨더군요.

cocos2d-x tests 프로젝트 추가 포함 디렉토리 내용인데요, 대부분은 비슷하게 설정하실 듯 합니다. 이게 2.0.1 버전일때 이랬고 2.0.0 일때는 cocos2dx하위 모든 폴더를 일일이 추가해놨었습니다. 저도 그리하다가 #include "CCArray.h" 이렇게 해와서 생긴 문제였습니다.

샘플처럼 cocos.h를 통으로 h파일에 include해주기는 싫고 필요한 파일만 include하려고 cocoa/CCString.h 식으로 바꿔주고 해결을 했습니다. 쉽게 할려면 cocos2d-x관련 된건 그냥 모두 cocos.h를 include해주면 됩니다.

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.