NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决
一直都是编译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;
- }
NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决的更多相关文章
- levmar ndk 编译
levmar是一个强大的和高效率的C/C++库,采用Levenberg - 马奎德(LM)优化算法, 主要是为了解决非线性最小二乘问题.官网是:http://users.ics.forth. ...
- C语言字节对齐问题详解
引言 考虑下面的结构体定义: typedef struct{ char c1; short s; char c2; int i; }T_FOO; 假设这个结构体的成员在内存中是紧凑排列的,且c1的起始 ...
- C语言字节对齐问题详解(对齐、字节序、网络序等)
首先说明一下,本文是转载自: http://www.cnblogs.com/clover-toeic/p/3853132.html 博客园用的少,不知道怎么发布转载文章,只能暂时这样了. 引言 考虑下 ...
- C语言字节对齐问题详解【转】
引言 转自:http://www.cnblogs.com/clover-toeic/p/3853132.html 考虑下面的结构体定义: 1 typedef struct{ 2 char c1; 3 ...
- [转]C语言字节对齐问题详解
C语言字节对齐问题详解 转载:https://www.cnblogs.com/clover-toeic/p/3853132.html 引言 考虑下面的结构体定义: typedef struct{ ch ...
- delphi的字节对齐
如果不改编译选项Delphi的Record默认也是4字节对齐的. 可以用编译开关指定 {$A4+}就是4字节对齐.同理{$A2+}.{$A1+}等.{$A1+}等同于Packed Record 主要容 ...
- 在非NDK编译条件下使用Android Log函数
解决的需求 有些时候不能在NDK环境编译,或者使用NDK编译会颇费周折,然后又想使用Android系统自带的Log类方法,那么我们就可以使用dlopen来实现我们的目的.比如在OpenCV中添加And ...
- arm 及ndk编译
首页 » Android android的armeabi跟armeabi-v7a 网友分享于:2014-03-16 浏览:867次 android的armeabi和armeabi-v7 ...
- 使用ndk编译c可执行程序
1.创建工程目录 在ubuntu系统下搭建好ndk编译环境,创建test目录 mkdir test 在test目录下创建jni目录 cd test mkdir jni 2.编写源代码 vim hel ...
随机推荐
- 【转】JABC访问oracle数据库报ORA-12505
Oracle 问题描述: 今天使用jdbc连接oracle 10.2.0.1.0 数据库的时候出现了下列错误: Connection refused(DESCRIPTION=(TMP=)(VSNNUM ...
- adb root : adbd cannot run as root in production builds
在有些android手机上使用adb root希望获取root权限时出现如下提示信息:adbd cannot run as root in production builds.此时提升root权限的方 ...
- XDM、GDM和KDM
XDM.GDM.KDM是三种X Window的显示管理器 (1)XDM(默认的X Window System Display Manager)(2)GDM(gnome提供的Display Manage ...
- Android4.2.2启动动画前播放视频
首先声明測试平台为瑞芯微的rk3168,Android4.2.2,Android版本号非常重要,由于Android4.0和Android4.2.2的代码有些地方就有差别,并不通用! 首先接到任务不知怎 ...
- TSC条码打印机C#例程(tsclib.dll调用)
TSC条码打印机C#例程(tsclib.dll调用) //---- program.cs using System;using System.Collections.Generic;using Sy ...
- 25LINQ拾遗及实例
投影 □ 遍历数组索引,Select获取 int[] indexes = {0, 2}; string[] strs = {"a", "b", " ...
- POPSpring动画参数详解
POPSpring动画参数详解 效果 源码 https://github.com/YouXianMing/Animations // // POPSpringParameterController.m ...
- TCP的三次握手与四次挥手(详解+动图)
背景描述 通过上一篇中网络模型中的IP层的介绍,我们知道网络层,可以实现两个主机之间的通信.但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在 ...
- 《3D打印:三维智能数字化创造(全彩)》
<3D打印:三维智能数字化创造(全彩)> 基本信息 作者: 吴怀宇 出版社:电子工业出版社 ISBN:9787121220630 上架时间:2014-1-13 出版日期:2014 年1月 ...
- [MAC OS] 解压Assets.car获取资源图片
reference to : http://www.jianshu.com/p/a5dd75102467 今天想获取APP的资源,但是查看xxx.app文件夹里面,缺少了大部分资源.在文件夹里面发现 ...