我正在研究 Frescale 的 iMX6quad Arm Cortex A9 CPU。操作系统是Linux。 它的运行时库已经为 armv5 架构编译,带有 -mfloat-abi=softfp 我想运行一个可以为 armv7-a arch 编译的应用程序,甚至可以在编译时启用硬浮点选项 (-mfloat-abi=hard)。
我是否应该期望应用程序能够在 ARM 上正常运行? 显然我不希望在“硬件”软件中执行对运行时库的访问,但我的代码位与“硬” float 一起工作?
也可能相反? 也就是说,如果库是为特定处理器编译的,并且所有硬件加速都是可能的,我是否可以(然后)使用 softfp ABI 编译一个简单的应用程序并期望它在 ARM 开发板上运行良好?
谢谢你的帮助
最佳答案
ARM float ABI 顾名思义是二进制接口(interface)。如果您有两个二进制文件,例如一个可执行文件和一个共享对象(动态库),它们需要具有相同的 ABI,否则它们将无法正常通信。
在细节上,二进制接口(interface)定义函数期望如何传递它们的参数,它们需要保留哪些寄存器。
例如,hard
和 softfp
ABI 之间的区别是 softfp 函数期望它们的浮点参数在常规寄存器中,而在硬约定函数中期望浮点参数在浮点寄存器中.
关于linux - 是否可以让使用不同选项编译的运行时库和应用程序一起顺利运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15140572/