NDK 函数定义了返回值,却没有返回,引发 signal 4 (SIGILL) 错误

      在做NDK开发的时候,引用了在嵌入式(非android平台)上的代码过来,明明原先正常使用的代码,移植过来就发生挂死,

由于代码太多,而LLDB又不能够跟踪到具体某一行的,只能一步一步地单步调试,最后发现了竞是 函数中定义了返回值,却没有返回 惹的祸。

错误信息

NDK 函数定义了返回值,却没有返回,引发 signal 4 (SIGILL) 错误

出错代码

NDK 函数定义了返回值,却没有返回,引发 signal 4 (SIGILL) 错误

打开编译警告

      鉴于此,为了检查还有多少代码有这种问题,得修改CMakefile,让所有有问题的地方发出警告,

给编译器加上 "-Wall" 将所有警告打开,(注意里面不要有 "-Wno-return-type"选项,因为这个正好是关闭这个警告的)

NDK 函数定义了返回值,却没有返回,引发 signal 4 (SIGILL) 错误

搜索编译警告信息

      这样,在编译输出信息里面搜索 "reaches end of non-void function",就可以搜索出所有的 定义了返回值,却没有返回的有问题的函数了。

(注意,要clean过再编译,不然会漏查了)

NDK 函数定义了返回值,却没有返回,引发 signal 4 (SIGILL) 错误

      有人说可以使用 "-Werror",这个我不建议,因为在多文件的情况下,某个文件编译遇到了错误,编译工作就停止了,

这样就不能一次性搜索到所有文件中有问题的函数了。