我试图将我的游戏移植到Android上。到目前为止,我已经编译了.so文件的所有依赖项,包括我的游戏引擎代码,然后我已经从主应用程序链接到这些共享库。
当我通过模拟器启动应用程序时,程序开始加载但在调用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的时候,第二个是如果我使用ndk-gdb,我根本看不到堆栈跟踪......
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)
如何获取更多调试信息以找出发生此类崩溃的原因?
此外,即使我已指定
,GL调用通过GLESv2.so也是正常的<uses-feature android:glEsVersion="0x00030000" />
在我的AndroidManifest.xml中?
答案 0 :(得分:0)
我认为这与SDL 2.0没有正确支持GLES 3有关。将我的代码改为兼容GLES 2会使问题消失。