完整的错误信息:Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 1552 (Thread-173)
Android4.4下运行好好的程序,放到5.0的手机上直接崩溃了。
好的查问题,发现是C++的底层文件报出的错误。JNI层面的错误信息不太具体,只有靠打印信息一步步查看问题,最后定位是pthread_mutex_init(H264datalock, NULL)互斥量初始化找不到地址,再看互斥量定义:pthread_mutex_t *H264datalock,难道是指针没有初始化造成的,但是此程序在Android4.4下跑了很久了,从没有出现过这个问题啊!抱着怀疑的态度,试一试,互斥量定义改为pthread_mutex_t H264datalock,不用指针,初始化则改为pthread_mutex_init(&H264datalock, NULL),好了,程序又顺利运行了。
思考结论:Android5.0的内核更新了Linux的SDK方法,在Android4.4下空指针可以丢给初始化函数让其完成初始化,而5.0后则不行了,不知道其他的库函数会不会也有这样的问题。