前言,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运行错误和解决办法相关推荐

  1. 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 ...

  2. android.mk 编译32位_C/C++初学者常见编译错误及其解决办法

    用户在C/C++集成开发环境(例如 Dev-C++)中编辑了源代码,执行编译之后,常常会因为源代码中存在问题而出现编译错误(它们会显示在编译窗口中).初学者常常会面对这些错误而不知如何处理.本文下面列 ...

  3. php5编译安装常见错误和解决办法集锦

    最近在给开发同事折腾开发测试环境,其中就有 php 的编译安装.由于每个人的需求不一致,所以也接触到了各种模块编译和集成,中间不乏各种编译依赖报错. 正好,搜了几次都是下面 2 篇文章内容,干脆就转到 ...

  4. UNIX网络编程—SCTP编译运行错误及解决

    UNIX网络编程-SCTP编译运行错误及解决 环境 ubuntu 14.04 64bits unpv13e 问题1 'redefinition of 'struct in_pktinfo' 解决办法1 ...

  5. php源码安装失败,php编译安装常见错误及解决办法

    php编译安装常见错误及解决办法 1.configure: error: No curses/termcap library found 网上有的说法是:–with-named-curses-libs ...

  6. Impala编译错误及解决办法汇总

    Impala编译错误及解决办法汇总 Impala repo里有C++.Java.Python.Bash的代码,编译过程中可能遇到各种问题.这个文章将作为一个汇总,以后每遇到一个编译问题,解决完后都会更 ...

  7. crosstool-ng 编译交叉工具链的常见错误及解决办法

    1.配置crosstool-ng产生的错误 1.1 ncurses headers files were not found Checking for 'ncurses/ncurses.h'... n ...

  8. ffmpeg库编译加文字_使用ffmpeg库编译错误及解决办法

    一.FFmpeg源代码下载与编译 # wget http://www.ffmpeg.org/releases/ffmpeg-0.5.13.tar.bz2 # tar -jxvf ffmpeg-0.5. ...

  9. PHP安装编译错误及解决办法

    今天搭建LAMP环境是编译PHP时出现的错误汇总. 错误: configure: error: xml2-config not found. Please check your libxml2 ins ...

最新文章

  1. 35岁以前成功的12条黄金法则(1)
  2. 系统动力学_System Dynamics
  3. 初探JavaScript魅力1
  4. UA SIE545 优化理论基础3 Fritz-John与Kuhn-Tucker理论总结 带等式约束与不等式约束的极值问题
  5. Redis-stat的安装与使用
  6. Redis(5种数据类型)
  7. DiskFileUpload类常用方法
  8. ASP.NET Core 依赖注入-集成 Autofac
  9. LeetCode 1534. 统计好三元组
  10. 两个电脑如何切换以方便使用文件
  11. 车和家李想批国内电动车虚假里程宣传:特斯拉都打到家门口了别自嗨了
  12. WebLogic plugin for juno下载地址
  13. [数]数学系列预习-补水题ver.
  14. .Net程序猿玩转Android开发---(11)页面跳转
  15. stringbuffer字符串反转操作
  16. 【BZOJ1095】【ZJOI2007】捉迷藏 [动态点分治]
  17. UVM学习整理——附录(部分组件源码)
  18. 揭秘勒索病毒背后黑客组织:偷了官方网络武器库
  19. Javascript-introduce
  20. 目前中国ib学校有多少所?

热门文章

  1. 2019国内某知名科技公司技术资料
  2. idea中git分支、合并与使用
  3. 不要再写这样的神级代码了!
  4. 聊聊rocketmq的ConsumerManageProcessor
  5. 【JAVA 第三章 流程控制语句】课后习题 编写判断从键盘输入的字符串是否为回文
  6. VMware linux 虚拟机(ubuntu18.04) 安装TL-WDN5200H 2.0网卡驱动 完美使用(适用于vmware无法桥接网络使用此方法)
  7. Docker系列文章索引
  8. 【C语言】将两个字符串连接起来
  9. C#LeetCode刷题之#475-供暖器(Heaters)
  10. 如何在React Native中构建项目并管理静态资源