2014-09-29 2 views
0

Android 게임으로 이식하려고합니다. 지금까지 필자는 게임 엔진 코드를 포함하여 .so 파일에 대한 모든 종속성을 컴파일 한 다음 주 응용 프로그램에서 이러한 공유 라이브러리에 연결했습니다. 내가 에뮬레이터를 통해 응용 프로그램을 실행하면glCreateProgram을 호출 할 때 Android 크래시를 디버그 할 수 없습니다.

, 프로그램은로드 시작하지만 glCreateProgram의 호출에 충돌 :

I/DEBUG ( 34): Build fingerprint: 'generic/sdk/generic:4.3/JB_MR2/774058:eng/test-keys' 
I/DEBUG ( 34): Revision: '0' 
I/DEBUG ( 34): pid: 873, tid: 900, name: UNKNOWN >>> com.indgames.rocks <<< 
I/DEBUG ( 34): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000048 
I/DEBUG ( 34):  r0 00000048 r1 00000001 r2 4d95ea24 r3 00000004 
I/DEBUG ( 34):  r4 00000048 r5 00000001 r6 4d960528 r7 00000018 
I/DEBUG ( 34):  r8 4d960c28 r9 4d860fb8 sl 2a20bc08 fp 4d95ea98 
I/DEBUG ( 34):  ip 4d422f20 sp 4d95e9e8 lr 4d41d637 pc 40034e4c cpsr 20000010 
I/DEBUG ( 34):  d0 417654683f800000 d1 417654683f800000 
I/DEBUG ( 34):  d2 3fe7ce583f800000 d3 0000000000000000 
I/DEBUG ( 34):  d4 0000000000000000 d5 3ff0000000000000 
I/DEBUG ( 34):  d6 3fe0000000000000 d7 3fb3bd3c01654680 
I/DEBUG ( 34):  d8 0000000000000000 d9 0000000000000000 
I/DEBUG ( 34):  d10 0000000000000000 d11 0000000000000000 
I/DEBUG ( 34):  d12 0000000000000000 d13 0000000000000000 
I/DEBUG ( 34):  d14 0000000000000000 d15 0000000000000000 
I/DEBUG ( 34):  scr 20000010 
I/DEBUG ( 34): 
I/DEBUG ( 34): backtrace: 
I/DEBUG ( 34):  #00 pc 0000de4c /system/lib/libc.so 
I/DEBUG ( 34):  #01 pc 00013633 /system/lib/libGLESv2_enc.so 
I/DEBUG ( 34):  #02 pc 00013ad9 /system/lib/libGLESv2_enc.so (GLSharedGroup::addProgramData(unsigned int)+18) 
I/DEBUG ( 34):  #03 pc 0000aa1b /system/lib/libGLESv2_enc.so (GL2Encoder::s_glCreateProgram(void*)+20) 
I/DEBUG ( 34):  #04 pc 00004eb5 /system/lib/egl/libGLESv2_emulation.so (glCreateProgram+14) 
I/DEBUG ( 34):  #05 pc 003cb690 /data/app-lib/com.indgames.rocks-2/libkglt.so (_ZN9GLChecker7CheckerIjRFjvEJEE3runES2_+16) 
I/DEBUG ( 34): 
I/DEBUG ( 34): stack: 
I/DEBUG ( 34):   4d95e9a8 00000000 
I/DEBUG ( 34):   4d95e9ac 4d95ea08 
I/DEBUG ( 34):   4d95e9b0 4d95e9e8 
I/DEBUG ( 34):   4d95e9b4 4d95e9d8 
I/DEBUG ( 34):   4d95e9b8 2a250568 [heap] 
I/DEBUG ( 34):   4d95e9bc 00000000 
I/DEBUG ( 34):   4d95e9c0 2a250088 [heap] 
I/DEBUG ( 34):   4d95e9c4 2a250088 [heap] 
I/DEBUG ( 34):   4d95e9c8 00000041 
I/DEBUG ( 34):   4d95e9cc 00000020 
I/DEBUG ( 34):   4d95e9d0 2a250938 [heap] 
I/DEBUG ( 34):   4d95e9d4 4d95e9a8 
I/DEBUG ( 34):   4d95e9d8 00000041 
I/DEBUG ( 34):   4d95e9dc 00000020 
I/DEBUG ( 34):   4d95e9e0 df0027ad 
I/DEBUG ( 34):   4d95e9e4 00000000 
I/DEBUG ( 34):  #00 4d95e9e8 00000000 
I/DEBUG ( 34):   4d95e9ec 00000001 
I/DEBUG ( 34):   4d95e9f0 4d960528 
I/DEBUG ( 34):   4d95e9f4 00000018 
I/DEBUG ( 34):   4d95e9f8 4d960c28 
I/DEBUG ( 34):   4d95e9fc 4d41d637 /system/lib/libGLESv2_enc.so 
I/DEBUG ( 34):  #01 4d95ea00 00000004 
I/DEBUG ( 34):   4d95ea04 4d41dadd /system/lib/libGLESv2_enc.so (GLSharedGroup::addProgramData(unsigned int)+22) 
I/DEBUG ( 34):  #02 4d95ea08 2a224fc0 [heap] 
I/DEBUG ( 34):   4d95ea0c 00000048 
I/DEBUG ( 34):   4d95ea10 4d960528 
I/DEBUG ( 34):   4d95ea14 4d41a6d7 /system/lib/libGLESv2_enc.so (glCreateProgram_enc+46) 
I/DEBUG ( 34):   4d95ea18 2a22b3d8 [heap] 
I/DEBUG ( 34):   4d95ea1c 00000001 
I/DEBUG ( 34):   4d95ea20 2a22b3d8 [heap] 
I/DEBUG ( 34):   4d95ea24 4d960528 
I/DEBUG ( 34):   4d95ea28 4d9602b8 
I/DEBUG ( 34):   4d95ea2c 4d414a1f /system/lib/libGLESv2_enc.so (GL2Encoder::s_glCreateProgram(void*)+24) 

여기에 첫 번째 이상한 점은 스택 트레이스가 난 경우 사방, GLESv2를 나열이다 GLESv3를 사용하여, 두 번째는이 충돌이 일어나는 이유

Program received signal SIGSEGV, Segmentation fault. 
[Switching to Thread 968] 
0x40034e4c in ??() from /home/kazade/Git/rocks-android/obj/local/armeabi-v7a/libc.so 
(gdb) bt 
#0 0x40034e4c in ??() from /home/kazade/Git/rocks-android/obj/local/armeabi-v7a/libc.so 
#1 0x4d41d636 in ??() 
#2 0x4d41d636 in ??() 
Backtrace stopped: previous frame identical to this frame (corrupt stack?) 
(gdb) 

가 어떻게 더 디버그 정보가 밖으로 작동시킬 수 있습니다 ... 내가 NDK-gdb를 사용하는 경우, 내가 전혀 스택 트레이스를 볼 수 있다는 것입니다?

또한, 내가 내의 AndroidManifest.xml에

<uses-feature android:glEsVersion="0x00030000" /> 

을 지정한 경우에도 GL 호출 GLESv2.so을 통해 이동하는 것이 정상입니까?

+0

v2.0 및 v3.0 모두에 대해 GLESv2 라이브러리 파일을 공유하는 것은 새로운 것이 아닙니다. v3.0은 결국 v2.0을 확장하고 많은 코드를 공유합니다. 더 중요한 것은 : _uses-feature_ 요소는 여러분이 넘겨주는 OpenGL 컨텍스트 버전에 대해 아무 것도 말하지 않는다는 것입니다. 적절한 경우 (즉, 코드 생성 방법에 따라) 코드에서 v3.0 컨텍스트를 명시 적으로 요구해야합니다. – harism

답변

0

이것이 SDL 2.0이 GLES 3을 제대로 지원하지 않는 것과 관련이 있다고 생각합니다. GLES 2와 호환되도록 내 코드를 변경하면 문제가 해결됩니다.

관련 문제