[ARM]【编译】【实践】 - 浮点编译选项NEON引发的Skia的库Illegal instruction运行错误和解决办法
前言,ARM编译器选项除了优化系统代码性能外,往往还具备其他一些设定,例如警告级别,和指令集的扩展
本文论述工作中遇到的一个编译开源浏览器chromine遇到的问题,由编译选项引发的可执行文件的Illegal instruction的错误
引子:
在使用海思的目标板的时候,用了之前的编译选项,如下:
-march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=neon
结果发现编译没有问题,但是,运行的时候出现Illegal instruction
分析:
指令错误,一般是编译器选择错误,或者,编译参数选择错误。这次,完全是上一次的编译参数,编译器也说明了,一致,那么错在哪里呢?
难道是CPU的架构有点不同。
使用:
# cat /proc/cpuinfo
# cat /proc/cpuinfo
processor : 0
model name : xxx
BogoMIPS : xxx
Features : swp half thumb fastmult vfp edsp vfpv3 vfpv3d16 tls
CPU implementer : xxx
CPU architecture: xxx
CPU variant : xxx
CPU part : xxx
CPU revision : 1Hardware : xxx
Revision : 0000
Serial : 0000000000000000
我们看到
“Features : swp half thumb fastmult vfp edsp vfpv3 vfpv3d16 tls ”
在cat 出来的cpu的功能列表里面,有vfp等浮点功能,但是没有支持neon的多媒体增强模块,也就是,该款CPU,A9的选项里面是没有使能Neon的,
那么用这个指令优化编译出来的指令,执行起来,一旦执行相关的操作,必然导致,指令错误的报错了。这就是问题的根本所在。
结论
ARM CPU的NEON的功能,居然在这块CPU上是不存在的,-mfpu=neon 这个编译选项是错误的。会让软件尝试调用NEON指令。
TechnologiesThere are a common set of industry-leading technologies found across the entire range of ARM processors, including:
The ARM Processor Architecture
big.LITTLE Processing
DSP and SIMD extensions
<span style="background-color: rgb(51, 255, 51);"><strong>NEON™ advanced SIMD instructions for efficient multimedia processing</strong>
</span>IEEE 754-compliant hardware floating point support (VFP)
Hardware-accelerated Java support (Jazelle®)
TrustZone® security extensions
Virtualization Extensions
In addition a range of Reference Methodologies for ARM processors is available. Reference Methodologies deliver a known level of performance, power efficiency and area for the processors based on specific EDA tools vendors and process geometries.
解决办法:
首先,我们应该知道,CPU的架构的不同到底会导致哪里的功能的缺少?
这一点,在我的另外一个博文里面有比较清楚的说明,后面,发现是系统运用的一个开源库skia的设定里面,默认是enable了Neon的功能。
解决的办法就是:在客户的gyp文件里面,定义arm_neon , 和 arm_neon_optional 为0,这两个变量在skia里面被用来编译甄别是否使能了Neon,
如果芯片本身不支持Neon,那么disable这个功能是必须的。
Ref:
1 ARM平台NEON指令的编译和优化
http://www.eeworld.com.cn/mcu/article_2016071427550.html
2
http://www.arm.com/products/processors/technologies/index.php
3 ARM 架构核和体系结构关系图
http://www.fx114.net/qa-215-170903.aspx
4 [ARM] [基础][编译]ARM的浮点功能历史分类和对应的编译选项
http://blog.csdn.net/yellow_hill/article/details/52608989
5 一个比较清晰的NEON的视频,和编译器的设定
http://www.cnx-software.com/2011/11/27/arm-neon-tutorial-in-c-and-assembler/
6
http://www.add.ece.ufl.edu/4924/docs/arm/ARM%20NEON%20Development.pdf
本帖原创:
请保持本帖链接,并@
QQ:28044280
[ARM]【编译】【实践】 - 浮点编译选项NEON引发的Skia的库Illegal instruction运行错误和解决办法相关推荐
- cocos2d-x-2.2中编译cocos2d-win32.vc2010.sln出现:C1083 pthread.h No such file or director错误的解决办法
cocos2d-x-2.2中编译cocos2d-win32.vc2010.sln出现:C1083 pthread.h No such file or director错误的解决办法 打开cocos2d ...
- android.mk 编译32位_C/C++初学者常见编译错误及其解决办法
用户在C/C++集成开发环境(例如 Dev-C++)中编辑了源代码,执行编译之后,常常会因为源代码中存在问题而出现编译错误(它们会显示在编译窗口中).初学者常常会面对这些错误而不知如何处理.本文下面列 ...
- php5编译安装常见错误和解决办法集锦
最近在给开发同事折腾开发测试环境,其中就有 php 的编译安装.由于每个人的需求不一致,所以也接触到了各种模块编译和集成,中间不乏各种编译依赖报错. 正好,搜了几次都是下面 2 篇文章内容,干脆就转到 ...
- UNIX网络编程—SCTP编译运行错误及解决
UNIX网络编程-SCTP编译运行错误及解决 环境 ubuntu 14.04 64bits unpv13e 问题1 'redefinition of 'struct in_pktinfo' 解决办法1 ...
- php源码安装失败,php编译安装常见错误及解决办法
php编译安装常见错误及解决办法 1.configure: error: No curses/termcap library found 网上有的说法是:–with-named-curses-libs ...
- Impala编译错误及解决办法汇总
Impala编译错误及解决办法汇总 Impala repo里有C++.Java.Python.Bash的代码,编译过程中可能遇到各种问题.这个文章将作为一个汇总,以后每遇到一个编译问题,解决完后都会更 ...
- crosstool-ng 编译交叉工具链的常见错误及解决办法
1.配置crosstool-ng产生的错误 1.1 ncurses headers files were not found Checking for 'ncurses/ncurses.h'... n ...
- ffmpeg库编译加文字_使用ffmpeg库编译错误及解决办法
一.FFmpeg源代码下载与编译 # wget http://www.ffmpeg.org/releases/ffmpeg-0.5.13.tar.bz2 # tar -jxvf ffmpeg-0.5. ...
- PHP安装编译错误及解决办法
今天搭建LAMP环境是编译PHP时出现的错误汇总. 错误: configure: error: xml2-config not found. Please check your libxml2 ins ...
最新文章
- 35岁以前成功的12条黄金法则(1)
- 系统动力学_System Dynamics
- 初探JavaScript魅力1
- UA SIE545 优化理论基础3 Fritz-John与Kuhn-Tucker理论总结 带等式约束与不等式约束的极值问题
- Redis-stat的安装与使用
- Redis(5种数据类型)
- DiskFileUpload类常用方法
- ASP.NET Core 依赖注入-集成 Autofac
- LeetCode 1534. 统计好三元组
- 两个电脑如何切换以方便使用文件
- 车和家李想批国内电动车虚假里程宣传:特斯拉都打到家门口了别自嗨了
- WebLogic plugin for juno下载地址
- [数]数学系列预习-补水题ver.
- .Net程序猿玩转Android开发---(11)页面跳转
- stringbuffer字符串反转操作
- 【BZOJ1095】【ZJOI2007】捉迷藏 [动态点分治]
- UVM学习整理——附录(部分组件源码)
- 揭秘勒索病毒背后黑客组织:偷了官方网络武器库
- Javascript-introduce
- 目前中国ib学校有多少所?
热门文章
- 2019国内某知名科技公司技术资料
- idea中git分支、合并与使用
- 不要再写这样的神级代码了!
- 聊聊rocketmq的ConsumerManageProcessor
- 【JAVA 第三章 流程控制语句】课后习题 编写判断从键盘输入的字符串是否为回文
- VMware linux 虚拟机(ubuntu18.04) 安装TL-WDN5200H 2.0网卡驱动 完美使用(适用于vmware无法桥接网络使用此方法)
- Docker系列文章索引
- 【C语言】将两个字符串连接起来
- C#LeetCode刷题之#475-供暖器(Heaters)
- 如何在React Native中构建项目并管理静态资源