2016년 9월 24일 토요일

Cocos2d-x, Error : Assert failed: reference count should be greater than 0

Fatal signal 11 (SIGSEGV)
D/cocos2d-x debug info: Assert failed: reference count should be greater than 0
E/cocos2d-x assert:
/Users/pineoc/Desktop/Game/proj.android-studio/../cocos2d/cocos/./base/CCRef.cpp function:retain line:89

현재 진행 중인 프로젝트에서 이러한 에러가 나오고 있다.

해당 파일에 들어가서 내용을 보면
void Ref::retain()
{
    CCASSERT(_referenceCount > 0, "reference count should be greater than 0");
    ++_referenceCount;
}

레퍼런스 카운트에 대한 문제인 것 같은데, 이 문제는 처음보는 문제라
분석을 해봐야 겠다.

----------------

현재 주 테스트 기기는 Dell Venue 7 인데
갤럭시 계열 기기는에서는 문제 없이 잘 돌아가는데, 유독 Dell Venue에서만 문제가 발생.
메모리 또는 태블릿이라 문제가 있는 것인지 추측해봤지만
메모리쪽은 모바일폰이랑 태블릿이랑 같아서 문제가 되지 않는것 같다.
단순히 성능이나 안드로이드 OS쪽 문제도 아닌 것 같은데 조금 더 분석이 필요한 것 같다.

----------------

로직을 살펴봤는데 아무래도 JniHelper, JNI를 사용하는 함수에서 문제가 있는 것 같다.
NDK쪽을 활용하는 JniHelper 클래스도 확인해보고 Thread Safe문제도 있는지 확인해봤지만
그 쪽 문제는 아닌 것 같다.

----------------
해당 문제를 없애기 위해서 여러가지 다 해봤는데
AndroidManifest.xml 설정부터 내부 로직까지 수정해봤으나 오류는 계속되었다.
JniHelper를 이용해서 함수를 부르는데에 문제가 있는 것 같아서 NDK쪽 문제인가해서
계속 찾아보았는데

테스트 기기가 x86 프로세서...
지금까지 NDK 빌드를 armeabi 버전으로만 빌드한것이 문제.
그래서 Application.mk에
APP_ABI := armeabi x86으로 수정해주고
빌드를 진행, 실행해봤더니 문제해결.

코드에도 문제가 있었을 수 있지만,
핵심은 프로세서 종류문제였다.

해결방법은 간단하게

APP_ABI := armeabi x86
을 추가해주면 끝.

댓글 없음:

댓글 쓰기

JIRA Plugin - ScriptRunner 소개 #2

관련 글 소개 #1:  https://pineoc.blogspot.com/2019/03/scriptrunner-1.html ScriptRunner 소개 #2 지난 글에서는 Behaviours를 보았고 다음 내용인 콘솔, 리스너 등을 ...