软浮点硬浮点不配套问题(error:uses VFP register arguments)

2023-10-27

1、前言

报错信息:

error:/home/xxx.a uses VFP register arguments,
/home/xxx.a does not

VFP(Virtual Float Point)是虚拟浮点运算,又分为硬件浮点数计算和软件浮点数计算。报错原因是一个库使用了硬件浮点数,另一个库没有使用,于是链接器在链接两个库文件时检查到两个库的浮点类型不匹配。

2、软浮点数(soft-float)

软件浮点数是利用库函数来进行浮点运算,不要求CPU有浮点运算相关的寄存器和浮点运算单元,因为是浮点库来运算所以在链接的时候要把浮点库链接进去:-lgcc。浮点数相较于硬件浮点数效率低,但是适配性好,不管CPU有没有浮点运算单元都可以。

3、硬浮点数(hard-float)

硬件浮点数就是用FPU(硬件浮点协处理器)进行浮点运算,将浮点运算编译成FPU能运行的指令,FPU通常有专门用于浮点运算的寄存器,使用硬件浮点计算会带来性能的提升,但前提是芯片要有FPU。

4、浮点运算的编译选项(-mfloat-abi=value)

在编译器中用"-mfloat-abi"选项指定浮点数运算方式,-mfloat-abi=soft是采用软件浮点运算;-mfloat-abi=hard是指定硬件浮点数,-mfloat-abi=softfp是兼容软件浮点运算的硬件浮点运算;在使用硬件浮点数时,还需要额外再指定FPU单元,通过-mfpu指定,比如-mfpu=vfp或者-mfpu=neno。
Linux系统默认编译选择使用hard-float,如果系统没有任何浮点处理器单元,这就会产生非法指令和异常。因而一般的系统镜像都采用软浮点以兼容没有VFP的处理器。
softfp,用fpu计算(即会将浮点运算编译成对应的浮点指令),但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。hard,用fpu计算,传参数用fpu中的浮点寄存器传,省去了转换性能最好,但是中断负荷高。

VFP & Neon

(1)VFP是一个按顺序工作的浮点协处理器, 它对一组输入执行一个操作并返回一个输出。目的是加快浮点计算,支持单精度和双精度浮点。
(2)Neon是SIMD (Single Instruction Multiple Data) , 支持单指令多数据操作,意味着在执行一条指令期间,将对多达16个数据集并行执行相同的操作,支持整数和单精度浮点数向量化(并行)操作。
(3)二者区别:VFP 支持单精度和双精度浮点,顺序执行,目的加快浮点计算。Neon 是SIMD,支持单指令多数据操作,支持整数和单精度浮点数向量化(并行)操作,不支持双浮点 。Neon最大的好处是如果想要执行矢量操作,如对视频的编码/解码, 它可以并行执行单精度浮点(float)操作。 从而提高对视频编码/解码性能。VFP 和Neon是共用浮点寄存器,只是执行的指令不同

5、解决步骤

5.1、确定当前是软/硬浮点数

在编译选项中,通过确定"-mfloat-abi"参数来查看当前采用的浮点运算方式;
(1)如果你有源码,直接去查看编译脚本确定;
(2)如果你只有编译好的库文件,比如.a文件获取.ko文件,尝试用文本编辑软件(natepad++)去打开,在里面查找编译选项的值;

5.2、重新指定编译采用的软/硬浮点数

修改编译选项"-mfloat-abi",使得两个库的浮点运算兼容,同时用软件浮点数或硬件浮点数。在使用硬件浮点数时要注意芯片是否有硬件浮点单元,否则会报错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软浮点硬浮点不配套问题(error:uses VFP register arguments) 的相关文章

  • C++的++

    include stdafx h int main int x y m n x 0 x x printf x 0 x x的值是 d n x x 0 y 0 y x printf x 0 y 0 y x的值是 d n y x 0 x x pr
  • 更换编译器,CODE::BLOCKS 无法DEBUG 至断点

    想在LINUX下使用CODE BLOCKS 编写调试并编译连接ARM运行程序 IDE编译环境默认为 GNU GCC 编译器 修改如下 1 至Settings gt Compiler and debugger settings 将Setect
  • ESOE-IDE v0.3 技术说明书

    ESOE IDE v0 3 技术说明书 Author Feng WeiGuo 冯卫国 Email forxm 21cn com Web http www supertree org Tel 86 0755 81030955 All Righ
  • linux汇编编译器:GAS和NASM的比较

    GAS即GNU AS汇编编译器 其属于AT T风格 我们常用的GNU的产品还有GCC G NASM是Linux平台下常用的汇编编译器 是intel风格的汇编编译器 MASM是Windows平台下的汇编编译器 也使用Intel风格 我们学80
  • 程序分析 clang系列学习 (二)

    clang静态检测 clang API AST匹配部分 UseAfterMoveCheck 问题概述 示例 代码 AST CFG 检测步骤 算法大致流程 代码 这里 我主要通过clang API实现自定义的代码检测工具 采用的方式类似于cl
  • GDB远程调试技术---基于mini2440

    GDB调试器提供了两种不同的调试代理用于支持远程调试 即gdbserver方式和stub 插桩 方式 这两种远程调试方式是有区别的 gdbserver本身的体积很小 能够在具有很少存储容量的目标系统上独立运行 因而非常适合于嵌入式环境 而s
  • 快速排序之“采取“尾递归”和“三数取中”技术的快速排序”

    快速排序之 采取 尾递归 和 三数取中 技术的快速排序 下面针对快速排序进行一些优化 QUICKSORT算法包含两个对其自身的递归调用 即调用PARTITION后 左边的子数组和右边的子数组分别被递归排序 QUICKSORT中的第二次递归调
  • 自己动手写basic解释器(一)

    自己动手写basic解释器 刺猬 http blog csdn net littlehedgehog 注 文章basic解释源码摘自梁肇新先生的 编程高手箴言 据他所说这个代码也是网上摘录的 源码解读参考 java编程艺术 java编程艺术
  • 在ubuntu里面安装交叉编译工具(树莓派的)

    交叉编译是什么 为什么要交叉编译 交叉编译 是在一个平台上生成另一个平台上的可执行代码 我们再windows上面编写C51代码 并编译成可执行代码 如xx hex 是在c51上面运行 不是在windows上面运行我们在ubuntu上面编写树
  • 【Java虚拟机】第三章、jvm运行期优化,解释器,编译器(AOT静态编译,JIT动态编译)

    已经第三章了 看了前两章是不是有点懵 或者开始意识到了什么 或者整个串联起来了 回顾一下 第一张主要讲的是jvm怎么创建 第二章讲的是jvm内存结构 和番外篇class加载过程 那么我们再结合这一章解释器和编译器 静态和动态编译 把他们串到
  • 多核编程学习笔记之OpenMP(一)

    多核编程学习笔记之OpenMP 一 I 配置及简介 1 1 在VC 2008 VC9 0 中 如果没有任何设置 在代码中使用编译指导语句将不会报错 但是也不起作用 1 2 OpenMP发展与优势 1 2 1 OpemMP的规范由SGI发起
  • 在 Ubuntu 操作中安装Code::Blocks

    在 Ubuntu 操作 中安装Code Blocks 步骤如下 安装步骤 1 先把编译环境 C库 C 库和Boost库装好 如下 sudoapt get install build essential 有可能安装 build essenti
  • MOV指令在32位汇编程序和64位汇编程序下的相同与不同之处

    mov指令原则 两个操作数 目标操作数和源操作数 的大小必须相同 两个操作数不能同时为内存操作数 也就是不能内存 到 内存 指令指针寄存器不能作为目标操作数 64位汇编程序下 32位汇编程序和64位汇编程序都依照上面的规则 语法也相同 但如
  • Java中多态的实现机制

    多态性是面向对象程序设计代码重用的一个重要机制 我们曾不只一次的提到Java多态性 在Java运行时多态性 继承和接口的实现一文中 我们曾详细介绍了Java实现运行时多态性的动态方法调度 今天我们再次深入Java核心 一起学习Java中多态
  • 关于C++对象模型(下)

    下篇主要讨论调用成员函数 访问成员变量的开销 及其特殊成员函数 数组 异常处理的讨论 这篇文章中出现的对象定义都出现在上篇中 全文在这里下载 文章内容转自 http tb blog csdn net TrackBack aspx PostI
  • bin、hex、elf、axf文件解析

    冰冻三尺非一日之寒 滴水穿石非一日之功 文章目录 引言 文件分类 1 bin文件 2 hex文件 3 axf文件 4 elf文件 总结 参考资料 深度理解编译过程 参考资料 深度理解编译文件 引言 bin hex elf axf作为嵌入式开
  • C++泛型编程:源起、实现与意义

    C 泛型编程 源起 实现与意义 为什么泛型泛型编程 Generic Programming 最初提出时的动机很简单直接 发明一种语言机制 能够帮助实现一个通用的标准容器库 所谓通用的标准容器库 就是要能够做到 比如用一个List类存放所有可
  • 编译优化之 - 向量化优化入门

    1 介绍 2 Intel高级向量扩展 3 GCC中向量化 4 ICC中向量化 5 AOCC LLVM中向量化 1 介绍 什么是自动向量化 自动向量化 automatic vectorization 是自动并行化 automatic para
  • C# 4.0的一些新特性

    vs2010正式版4月12日发布了 前几天我也下了一个 但这几天都没有时间好好试用一下 今天针对C 语言的新特性使用了一下 感觉还不错 有几个新特性和大家分享一下 希望我没有太火星 一 新关键词 dynamic 在新版本的C 中 dynam
  • C语言深入学习--checklist4:宏、枚举、switch

    宏 1 宏的本质是什么 函数 语句 类型定义 或者其它 预编译器的文本替换 1 你知道语言设计者为什么设计宏吗 这些原因目前是否成立 在 C程序中 可以用宏代码提高执行效率 宏代码本身不是函数 但使用起来象函数 预处理器用复制宏代码的方式代

随机推荐

  • apache转发tomcat http转https

    最近在弄小程序 而小程序网络请求所需要的链接需要https安全链接 之前胡乱配置一番可以用了 不过并不太理解 后来又需要一个php项目 各处查看了一下 需要apache服务器 而我的只有一个域名 已经给了tomcat了 如果在域名后面加端口
  • 2020-10-07

    渗透测试 U盘监控器 1 打开USB监控器 注册时输入任意注册码 出现注册失败页面 2 在Winhex打开USB监控器 exe 文本搜索 注册失败 之后推出字符串文件偏移地址为0x81A79 引用该字符串的指令在字符串地址的常量为0x048
  • Java09

    一 继承 在Java中 使用关键字extends来继承类 父类 public class Fu int num 100 public void methodfu System out println num 子类继承 关键字 public
  • dns服务器项目实例,DNS服务器配置实例-----主DNS服务器

    DNS服务器配置简单实例 主DNS服务器 DNS服务器类型 主DNS服务器 master 辅助DNS服务器 slave 高速缓存服务器 hint 安装bind三部曲 1 查询包是否已经安装 Nborn root 08 06 rpm q bi
  • esp32 Micropython驱动ST7735 1.8寸TFT屏幕 中文显示;时间显示、网络network实时时间获取utptime;urequests、upip等包安装

    参考 https blog csdn net weixin 57604547 article details 122274614 0 线连接 IO就是GPIO引脚 ESP32 TFT 屏ST7735 GND GND 3 3V VDD IO2
  • springboot集成shiro

    这里写自定义目录标题 Springboot集成shiro Shiro介绍 springboot集成shiro Springboot集成shiro Shiro介绍 Shiro是Apache 的一个开源项目 是一个java的安全框架具有认证 授
  • Open Euler学习

    Open Euler学习 目录 Open Euler学习 Open Euler安装截图 使用MobaXterm exe软件 连接自己的操作系统 作业问题 1 使用什么命令查看 ip 地址及接口信息 2 cp和mv命令有什么区别 用什么指令将
  • EM算法推导(收敛性证明和在GMM中的应用)

    一 EM算法的提出 当你有一组数据像如下这样 Note picture source 显然用单个高斯分布模型去拟合它们效果不好 这是一个典型的高斯混合模型的例子 p X
  • TypeError: strptime() takes no keyword arguments ValueError(“‘%s‘ is a bad directive in format ‘%s‘“

    t datetime datetime strptime 2021 5 12 09 28 11 format Y m d h m s 1 错误原因 参数格式不匹配 strptime定义 def strptime data string fo
  • leveldb(六):key的不同种类型

    有5个key的概念 可能会让人混淆 下面就来一个一个的分析 User key 最简单的key了 就是用户传入的数据 Slice user key ParsedInternalKey enum ValueType kTypeDeletion
  • sqlite3交叉编译

    1 交叉编译sqllite3可以先从官网下载最新最新的源码进行编译 sqlite3下载sqlite3有两种版本的源代码 sqlite amalgamation 3300100 zip这种是将所有的操作放到sqlite3中进行使用的 虽然官方
  • 特征筛选1——根据方差筛选(单变量筛选)

    根据给定方差的阈值 删除掉值变化小的维度 以此降低数据规模 当把阈值设置为0的时候 就会删除没有变化的数据 示例 import numpy as np from sklearn feature selection import Varian
  • 【模板】组合数取模

    文章目录 1 利用递推式预处理组合数取模 2 预处理阶乘的余数和阶乘逆元的余数 3 卢卡斯定理 4 将组合数分解质因数 高精度乘低精度 1 利用递推式预处理组合数取模 题目描述 给定 n n n 组询问 每组询问给定两个整数 a
  • C++类继承:派生类的构造函数

    派生类不能直接访问基类的私有成员 必须使用基类的公有方法来访问基类的私有成员 这意味着派生类的构造函数必须使用基类的构造函数来设置从基类中继承的私有成员 因此 在程序使用派生类构造函数创建派生类对象之前 要使用基类构造函数创建基类对象 C
  • CSS样式里面的堆叠(层叠)上下文(层次顺序z-index)

    看了网上很多的博客 将了关于这个层叠上下本的技术博客 然后我也自己去整理了下 我这篇关css元素的堆叠顺序 写的很清楚 很有条理 很简单明了 层叠上下文的法则都总结好了 希望对大家有帮助 这个属于扩展 当然你想了解技术的话 可以看看我这个关
  • SAP自建表做搜索条件时,需要的search help(源代码)

    以我之前写的 在SAP自建 全国各大城市数据表http blog csdn net szlaptop article details 8074609 为基础 设计search help 最终效果如下 因为是自建全国各省市数据表 用做查询的时
  • 【C++】Lambda表达式

    C 11的一大亮点就是引入了Lambda表达式 利用Lambda表达式 可以方便的定义和创建匿名函数 对于C 这门语言来说来说 Lambda表达式 或 匿名函数 这些概念听起来好像很深奥 但很多高级语言在很早以前就已经提供了Lambda表达
  • 查看端口占用

    1 cmd打开命令窗口 2 netstat ano 列出所有端口的情况 在列表中我们观察被占用的端口 3 查看被占用端口对应的PID 输入命令 netstat aon findstr 49157 回车 记下最后一位数字 即PID 这里是27
  • 智能故障诊断方法总结

    1 故障诊断方法可分为三个步骤 信号处理 特征提取 模式分类 2 信号处理方法通常包括 时域处理 提取振动信号的相关指标 频域处理 包络谱分析 频谱分析 时频域分析 小波分析 傅里叶变换 3 故障诊断方法 专家系统故障诊断法 模糊故障诊断
  • 软浮点硬浮点不配套问题(error:uses VFP register arguments)

    1 前言 报错信息 error home xxx a uses VFP register arguments home xxx a does not VFP Virtual Float Point 是虚拟浮点运算 又分为硬件浮点数计算和软件