欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

关于交叉工具链编译arm裸机程序出现除法时的有关问题

更新时间: 2014-01-05 03:19:56 责任编辑: Author_N1

 

关于交叉工具链编译ARM裸机程序出现除法时的问题
话说用交叉工具链编译裸机时,出现了下面这样的错误。
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标号无误。但为毛还是被提示找不到除法呢?


这还可能会是哪儿的问题呢
--参考方法--
引用:
Quote: 引用:

我隐约记得 int i,j; 
。。。。






找到个新的方法,直接全部用arm-linux-gcc,通过-Wl向gcc自身的链接器传递链接选项,没再用arm-linux-ld这个工具。这样试了试倒能成功,下载到板子上可以运行。但总感觉这方法不规范,Uboot里就没这么用。还是想知道ar……


有空就继续试呗
--参考方法--
应该是链接找不到符号,最大的可能是设置的链接库路径不对,使用arm-linux-gcc可以是因为使用arm-linux-gcc系统使用了默认的库,而arm-linux-ld没有自己使用默认的库
--参考方法--
貌似是编译器的问题。。。。。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:19:56
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20918/
本文WWW.DOC100.NET DOC100.NET版权所有。