NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决
来源:互联网 发布:风力发电机组数据 编辑:程序博客网 时间:2024/06/06 16:32
一直都是编译armabi的,没有任何问题,这个架构是软件模拟浮点运算的。
后来看到NDK文档上说armabi-v7a是针对有硬件处理浮点计算的arm cpu的。
于是就修改配置编译armebai-v7a的so文件。
结果是编译没问题,一运行就是crash掉,Fatal signal 7 (SIGSEGV)错误。
进过排查才发现,crash掉的仅仅是对一个浮点变量赋值而已。
只不过,这个浮点内存,是一个连续内存中的一部分。
经过排查才发现,这个so文件使用了浮点指令,需要指针4字节对齐。举个例子
char* ptr = malloc(10);float* f = (float*) (ptr + 2);f[0] = 1.0f;
这里f[0]就会crash掉,使用f指针的访问操作就报错。因为f指针没有4字节对齐。
malloc可以保证返回的指针是对齐的,对指针的偏移操作,导致指针没有4字节对齐,是非常隐蔽的。
究其原因,是因为arm cpu的指令,要求内存访问是4字节的整数倍,否则就会发生硬件报错。
当我断言代码中一定是这样的错误原因的时候。我做了一个测试,在程序启动的时候,用了以上代码。
然而,然而,并没有crash掉, 我了个fuck啊~
进过我锲而不舍的各种测试和猜测,我找到了必定crash的代码。如下
char* ptr = malloc(10);float* f = (float*) (ptr + 2);for (int i = 0; i < 1; i++) { f[0] = 1.0f;}
是的,很奇怪,只有在循环的时候非4字节对齐才会crash,我测试了for和while都是这样。
故事的结局是,我确实有for循环非4字节对齐的赋值代码,修改掉之后,运行就没有问题了。
1 0
- NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决
- NDK Fatal signal 11 (SIGSEGV) 错误定位
- NDK 使用 addr2line 定位 Fatal signal (SIGSEGV) 错误
- NDK 使用 addr2line 定位 Fatal signal (SIGSEGV) 错误
- Fatal signal 11 (SIGSEGV) 错误
- Fatal signal 11 (SIGSEGV) 错误
- JNI中Fatal signal 11 (SIGSEGV), code 1的错误.
- Fatal signal 11 (SIGSEGV) (WebViewCoreThre)崩溃的解决
- Fatal signal XX (SIGSEGV) 常见解决思路
- Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1) 错误 解决方案(android-ndk)
- Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1) 错误 解决方案(android-ndk)
- Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1) 错误 解决方案(android-ndk)
- Fatal signal 11 (SIGSEGV)的问题
- Fatal signal 11 (SIGSEGV)的问题
- Android fatal signal 11 sigsegv at 0x00000030 code 1 错误分析解决
- fatal signal 11 sigsegv
- Fatal signal 11 (SIGSEGV)
- 关于“Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1), thread 7592 (xample.hellojni)”android NDK错误排查
- android一键分享功能不使用任何第三方sdk
- adb devices : * daemon not running. starting it now on port 5037
- Objective-C Associated Objects 的实现原理
- IntelliJ IDEA 快捷健与eclipse对比
- 动态寻路
- NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决
- unity Json
- ubuntu安装编译 webrtc
- webview中html页面点击文本框整个页面放大
- BZOJ 3172 [Tjoi2013]单词 AC自动机(fail树)
- 不再需要第三方网络诊断工具VS2015
- QDialog 的一些接口,如透明化
- Android Frame(逐帧动画)的使用
- html中组织内容的元素总结