答案 0 :(得分:92)
答案 1 :(得分:30)
答案 2 :(得分:19)
严格地说,所有这些答案对我来说都是错误的。
当我用我的交叉工具链编译C代码时,链接器打印警告页面,说我的可执行文件使用硬浮动,但我的libc使用软浮动。有什么区别?
Debian VFP wiki包含有关-mfloat-abi
,
soft
- 这是纯软件softfp
- 这支持硬件FPU,但 ABI 是软兼容的。hard
- ABI使用 float 或 VFP 寄存器。链接器(加载器)错误是因为您有一个共享库,它将在整数寄存器中传递浮点值。您仍然可以使用-mfpu=vfp
等编译代码,但是您应该使用-mfloat-abi=softfp
,这样如果 libc 需要一个浮点数,它就会以库理解的方式传递。< / p>
Linux内核可以支持VFP指令的仿真。显然,对于这种情况,最好使用-mfpu=none
进行编译,并让编译直接生成代码,而不是依赖于任何Linux内核仿真。但是,我不相信OP的错误实际上与此问题有关。它是独立的,还必须与-mfloat-abi
一起处理。
Armv5 shared library with ArmV7 CPU与此相反; libc 很难浮动,但应用程序只是 soft 。它有一些解决问题的方法,但使用正确的选项重新编译总是最简单的。
另一个问题是Linux内核必须支持VFP任务(或存在任何ARM浮点)以保存/恢复上下文切换中的寄存器。
答案 3 :(得分:12)
答案 4 :(得分:7)