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