c - 在 GCC 中不能除数的原因是什么

标签 c gcc makefile arm

我遇到了一个非常奇怪的情况。每次我尝试编译我的 arm 项目(LPC2378,codesourcery arm-none-eabi-gcc-4.5.1)时,我在链接时都会遇到同样的错误

/media/data/Projects/arm/uart/main.c:39: undefined reference to `__aeabi_uidiv'
/media/data/Projects/arm/uart/main.c:40: undefined reference to `__aeabi_uidiv'

违规代码如下所示:

U0DLL = ((((PLLCFG & 0x7FFF) + 1) * F_OSC) / ((((PLLCFG & (0xFF << 16)) >> 16) + 1) * ((CCLKCFG & 0xFF) + 1) * 8 * BAUD * 1)) % 256;
U0DLM = ((((PLLCFG & 0x7FFF) + 1) * F_OSC) / ((((PLLCFG & (0xFF << 16)) >> 16) + 1) * ((CCLKCFG & 0xFF) + 1) * 8 * BAUD * 1)) / 256;

我四处搜索,这可能是由什么引起的,AFAICT,没有为 LD 使用 lgcc 和 lc 选项。我已经解决了这个问题,但错误仍然存​​在。

完整项目可以是found at my github repo .

如果有人能提供帮助,我们将不胜感激。干杯。

最佳答案

ARM 系列 CPU 没有 native 整数除法指令。所以,除法需要通过一个库函数来实现。 GCC 知道这一点,并创建了对(在您的情况下)__aeabi_uidiv 的引用(用于 unsigned int 划分)。

您需要链接到包含此函数的适当运行时支持库。

关于c - 在 GCC 中不能除数的原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6576517/

相关文章:

c - 尝试取消引用动态分配的指针时出现段错误

ruby-on-rails-3 - 将 redcarpet gem 添加到 Rails 应用程序后运行 "sh: make: command not found"时出现 "$ bundle"

c - 删除的重新声明中的类型不匹配以及删除调用中的参数太少

C编译错误,未找到外部库函数

c - 如何在 C 中强制使用返回值

c++ - 从参数的返回类型推断类型

c - 有趣的 GCC 链接

C通过Makefile设置可执行权限

java - 我正在使用命令make进行编译。它在Linux中显示错误127

c - 使用 float 变量和 scanf() 获取用户成绩并 printf() 进行调试断言失败