결론 : android.mk에
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static LOCAL_WHOLE_STATIC_LIBRARIES += cocos_gui_static LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static … $(call import-module,2d) $(call import-module,audio/android) $(call import-module,Box2D) $(call import-module,gui) $(call import-module,extensions) $(call import-module,editor-support/cocostudio) $(call import-module,network)
을 추가하면 된다.
extension, control, cocos2dx, eclipse
NDK Debugging (1) | 2014.07.21 |
---|
fatal signal 11 (SIGSEGV) at 0x00000010로 고통받다 에러난곳의 디버깅 방법을 발견하고 구제 받음.
에러원인은 bool 멤버변수를 초기화 안하고 그대로 써서..........후.............
클래스 상속시엔 멤버를 소중히
출처 : http://bongman.tistory.com/21
앱이 실행 중 크래쉬됐을 때는 크래쉬 덤프(crash dump)를 확인하면 대강의 원인을 파악할 수 있다. 이를 위해 ‘Addr2line’ 라는 툴을 사용한다. Addr2line 툴은 명령어 주소와 실행 이미지를 파일 이름, 함수 이름, 소스 라인 번호로 변환하는 유틸리티이다. NDK는 ‘arm-linux-androideabi-addr2line’ 라는 이름으로 해당 툴을 제공한다.
먼저 아래 그림과 같이 사용자 계정의 루트 디렉토리로 이동한 뒤 편집기로 .bash_profile 파일을 연다.
그리고 PATH 에 ‘arm-linux-androideabi-addr2line’ 툴이 있는 디렉토리를 다음과 같이 추가한다.
export PATH=${PATH}:$NDK_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin |
여기서 ‘$NDK_ROOT’ 는 NDK가 설치된 디렉토리를 의미한다. 각자 환경에 맞게 절대 경로를 넣는다. 설정을 마쳤으면 현재 프로젝트의 /proj.android 디렉토리로 이동한 뒤 아래와 같이 Addr2line를 실행한다.
arm-linux-androideabi-addr2line -C -f -e obj/local/armeabi/libXXX.so <address> |
libXXX.so 는 게임 소스 라이브러리를 의미하며 기본으로 설정된 이름을 수정하지 않았다면 libgame.so 다. <address>는 앱이 크래쉬됐을 때 이클립스 LogCat에 출력되는 주소 값이다.
아래 그림은 앱이 크래쉬됐을 때 LogCat에 출력되는 로그다. 하이라이트된 라인의 000e6c54가 크래쉬된 코드의 주소 값이다.
이 주소 값을 Addr2line 툴에 넘겨주고 실행해 보면 아래 그림과 같이 문제가 된 파일명인 ‘HelloWorldScene.cpp’과 ‘76’ 이라는 라인 정보, 그리고 멤버 함수명인 ‘HelloWorld::init()’ 까지 출력된다.
cocos2dx 확장 라이브러리 사용시 이클립스 설정 (0) | 2014.07.31 |
---|