F libc : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x18 in tid 3083 (qtMainLoopThrea), pid 3066

nyjblogs / 2024-04-19 / 原文

在windows上开发Android(安卓)应用,核心框架是OpenGL,具体实现为(QOpenGLFunctions和QOpenGLWidget)。
开发的时候用mingw编译,没问题。开发一个阶段结束使用Android编译器,构建部署成功,但异常退出,异常信息为:
F libc : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x18 in tid 3083 (qtMainLoopThrea), pid 3066。
经过调试发现,OpenGL ES的glDrawElements函数在两个编译器的实现不同:
mingw编译器考虑到glDrawElements(GLenum mode, GLsizei count, GLenum type, void * indices)的count为0的情况,但是如果在安卓中,count=0会报错……

教训:进行编码时要考虑到跨平台问题,不要过分依赖函数自己的机制。