将ARM gcc生成的库从一个软浮点bi转换为硬浮点abi

时间:2018-07-18 09:40:18

标签: floating-point arm stm32

我需要将我的固件(在使用arm-none-eabi_gcc构建的STM32L4x6上运行)与两个第三方库(我没有这些库的源代码)链接。

一个库使用硬浮点abi编译,而另一个则根本不使用浮点,并且可能与软浮点abi链接。

我知道两个abis都不兼容,并且我完全理解它们之间的区别,但是如果一个库根本不使用浮点运算怎么办?是什么阻止了使用abi将其与其他代码链接?

在我搜索过的内容中,无法在这种情况下强制使用链接器,但是是否可以将库(.a从gcc)从一个float abi转换为另一个?

2 个答案:

答案 0 :(得分:2)

您可以强制链接器接受ABI不匹配的对象,

--noinhibit-exec

或(如果通过gcc包装器调用)

-Wl,--noinhibit-exec

您会收到一些错误消息,但它仍然会生成合理的二进制文件。

或者,您可以使用以下方式从目标文件中删除包含ABI信息的属性:

arm-none-eabi-objcopy --remove-section=.ARM.attributes input.o output.o

,链接器随后将很高兴将其与任何内容链接。

如果它不是单个目标文件(.o)而是库(.a),则可能必须使用arm-none-eabi-ar从库中提取对象并重新组装它之后。

答案 1 :(得分:0)

我唯一能想到的方法是另一个C包装程序,您在其中定义将与软浮点数和硬浮点数链接的函数。当然,这是解决方法,但是您需要向编译器展示如何将参数传递给函数。