话说用交叉工具链编译裸机时,出现了下面这样的错误。
clock.o: In function `get_PLLCLK':
clock.c:(.text+0x45c): undefined reference to `__aeabi_uidiv'
clock.o: In function `get_ARMCLK':
clock.c:(.text+0x4c0): undefined reference to `__aeabi_uidiv'
clock.o: In function `get_HCLK':
clock.c:(.text+0x570): undefined reference to `__aeabi_uidiv'
clock.o: In function `get_PCLK':
clock.c:(.text+0x608): undefined reference to `__aeabi_uidiv'
我见提示语是跟uidiv除法有关,因为clock.c文件中那几个函数(这些函数是获得系统时钟的)都出现了类似这样的语句:
return (m * (CONFIG_SYS_CLK_FREQ / (p * (1 << s))));
就是都用了除法。
猜测可能是ARM没有除法指令所以除法还得用库函数实现。在网上查了下果然如此,于是就在Makefile里改了编译选项,改后输出结果如下:
CCFLAG is -I ./ -c
LDFLAG is -Bstatic -T my.lds -Ttext 0x0c000000 -nostdlib -L /opt/FriendlyARM/toolschain/4.5.1/ lib/gcc/arm-none-linux-gnueabi/4.5.1 -lgcc
按照网上多数网友的说法,下一步我应该马上遇到个raise标号的问题,我也希望剧情可以这样发展,因为这个raise的问题不难解决。但奇葩的是,我修改库路径和链接选项后,我的问题依然如故,还是显示找不到_aeabi_uidiv,怎么回事?我查看了我机子上交叉工具链里的 libgcc.map文件,发现里面确实有__aeabi_uidiv标号无误。但为毛还是被提示找不到除法呢?
这还可能会是哪儿的问题呢
------解决方案--------------------