我正在使用Frescale的iMX6quad Arm Cortex A9 CPU。操作系统是Linux。 它的运行时库已经使用-mfloat-abi = softfp为armv5架构编译 我想运行一个我可以编译为armv7-a arch的应用程序,甚至在编译期间启用硬浮点选项(-mfloat-abi = hard)。
我是否应该期望应用程序在ARM上正常运行? 显然我不希望在'hard'-ware中执行对运行时库的访问,但是我的代码与'hard'的工作漂浮得很好?
也可能相反? 也就是说,如果为特定处理器编译库并且可以进行所有硬件加速,那么我可以(然后)使用softfp ABI编译一个简单的应用程序并期望它在ARM开发板上运行良好吗?
感谢您的帮助
答案 0 :(得分:1)
ARM float ABIs的首字母缩写表明是二进制接口。如果您有两个二进制文件,例如可执行文件和共享对象(动态库),则它们需要具有相同的ABI,否则它们无法正常通信。
在详细信息中,二进制接口定义函数如何期望传递参数,以及它们需要保留的寄存器。
例如,hard
和softfp
ABI之间的区别是softfp函数期望它们在常规寄存器中的浮点参数,而在硬约定函数中期望浮点寄存器中的浮点参数。