我遇到了一个非常奇怪的情况。每次我尝试编译我的 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/