【问题标题】:is it possible to have runtime libs and applications compiled with different options run smoothly together?是否可以让使用不同选项编译的运行时库和应用程序一起顺利运行?
【发布时间】:2013-02-28 16:26:07
【问题描述】:

我正在开发 Frescale 的 iMX6quad Arm Cortex A9 CPU。操作系统是Linux。 它的运行时库已经为 armv5 架构编译了 -mfloat-abi=softfp 我想运行一个可以为 armv7-a 编译的应用程序,甚至在编译时启用硬浮点选项(-mfloat-abi=hard)。

我应该期望应用程序在 ARM 上运行良好吗? 显然我不希望对运行时库的访问是在“硬”软件中进行的,但是我的代码部分可以在“硬”浮动的情况下正常工作?

也可能相反? 也就是说,如果这些库是针对特定处理器编译的,并且具有所有可能的硬件加速功能,那么我是否可以(然后)使用 softfp ABI 编译一个简单的应用程序并期望它在 ARM 开发板上运行良好?

感谢您的帮助

【问题讨论】:

    标签: linux arm libraries


    【解决方案1】:

    ARM 浮点 ABI 的首字母缩写表示二进制接口。如果您有两个二进制文件,例如一个可执行文件和一个共享对象(动态库),它们需要具有相同的 ABI,否则它们将无法正常通信。

    在详细信息中,二进制接口定义了函数期望其参数如何传递,它们需要保留哪些寄存器。

    例如,hardsoftfp ABI 之间的区别在于,softfp 函数期望它们的浮点参数在常规寄存器中,而在硬约定函数中,浮点参数期望在浮点寄存器中。

    【讨论】:

    • 好消息是,只要不让任何浮点数越过 ABI 边界,它就可以工作!
    • @tc 边界在哪里?我的应用程序和运行时库之间?
    • @nass 边界在硬浮点(您的应用程序)和软浮点(您的库)代码之间,不兼容具体是在寄存器中传递/返回的 WRT 浮点数。不幸的是,这意味着您必须包含自己的sin()/fabs()/etc 版本。也应该可以编写一个 shim 来在两个 ABI 之间进行转换,但是您需要跳过一些环节以避免符号名称冲突。
    猜你喜欢
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2017-04-10
    • 2013-04-22
    • 2015-03-23
    • 2017-05-30
    • 2017-12-22
    相关资源
    最近更新 更多