首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未定义的对`__aeabi_ddiv‘和朋友的引用-构建没有stdlib但有-mfloat=hard

未定义的对`__aeabi_ddiv‘和朋友的引用-构建没有stdlib但有-mfloat=hard
EN

Stack Overflow用户
提问于 2014-10-21 15:33:08
回答 2查看 5.7K关注 0票数 11

我正试图为Cortex-M4F建立一个项目。芯片有一个FPU,所以我使用-mfpu=fpv4-sp-d16 -mfloat-abi=hard构建,我不使用任何库来节省空间,所以我做了-nostdlib -fno-builtin

现在我想使用浮点操作,但是当这样做时,我会得到一个链接器错误:

代码语言:javascript
运行
复制
led1642gw_gain.c:(.text.led_calculateGain+0xc): undefined reference to `__aeabi_f2d'
led1642gw_gain.c:(.text.led_calculateGain+0x24): undefined reference to `__aeabi_ddiv'
led1642gw_gain.c:(.text.led_calculateGain+0x36): undefined reference to `__aeabi_dsub'
led1642gw_gain.c:(.text.led_calculateGain+0x48): undefined reference to `__aeabi_ddiv'
led1642gw_gain.c:(.text.led_calculateGain+0x54): undefined reference to `__aeabi_d2f'
led1642gw_gain.c:(.text.led_calculateGain+0x9e): undefined reference to `__aeabi_f2d'
led1642gw_gain.c:(.text.led_calculateGain+0xb6): undefined reference to `__aeabi_ddiv'
led1642gw_gain.c:(.text.led_calculateGain+0xc8): undefined reference to `__aeabi_dsub'
led1642gw_gain.c:(.text.led_calculateGain+0xda): undefined reference to `__aeabi_ddiv'
led1642gw_gain.c:(.text.led_calculateGain+0xe6): undefined reference to `__aeabi_d2f'
led1642gw_gain.c:(.text.led_calculateGain+0x10c): undefined reference to `__aeabi_f2d'

为什么会这样呢?如果我正确理解,它不应该依赖于库函数,而是使用ARM本机FPU指令。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-21 16:10:17

您的核心支持单精度浮点指令,但是您的代码使用双精度浮点。

您可以注意到,所有缺失的__aeabi内容都有一个'd‘(在double中)。

如果代码中有浮点文字,按照C标准,它们被认为是双重的。您可以通过在文字末尾添加一个fF来强制它们进入单精度范围。

2.13.3浮点字面值:除非由后缀显式指定,否则floating文字的类型是双重的。后缀f和f指定浮动..。

票数 9
EN

Stack Overflow用户

发布于 2018-04-27 01:38:47

众所周知,在C中,浮点文字(例如,1.23)有双重类型。因此,任何涉及它们的计算都会被提升到两倍。

要解决这个问题,请在所有文字的末尾加上“f”。

代码语言:javascript
运行
复制
if (x < 2.5) ...

代码语言:javascript
运行
复制
if (x < 2.5f) ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26490587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档