主题 : 写裸机代码编译出现undefined reference to `__aeabi_idiv' 复制链接 | 浏览器收藏 | 打印
脸上的痘痘提醒我我还年轻,口袋的米米告诉我我仍需努力。。。
级别: 新手上路
UID: 79394
精华: 0
发帖: 17
金钱: 85 两
威望: 17 点
综合积分: 34 分
注册时间: 2012-10-07
最后登录: 2016-12-12
楼主  发表于: 2013-05-16 02:01

 写裸机代码编译出现undefined reference to `__aeabi_idiv'

用的是tiny210v2,随便拿一个裸机例程。先看makefile:
obj = start.o main.o

usart.bin: $(obj)
@arm-linux-ld -Ttext 0x20000000 -o usart.elf $^ @arm-linux-objcopy -O binary usart.elf usart.bin @arm-linux-objdump -D usart.elf > usart_elf.dis
%.o : %.S
@arm-linux-gcc -o $@ $< -c -fno-builtin

%.o : %.c
@arm-linux-gcc -o $@ $< -c -fno-builtin

.PHONY: cleanclean:
@rm *.o *.elf *.bin *.dis *.exe *~ -f

编译后出现错误:
[root@localhost 9.key_led]# makearm-linux-ld -Ttext 0x20000000 -o key_led.elf start.o main.o
main.o:In function `main':main.c:(.text+0x24): undefined reference to `__aeabi_idiv'
make: *** [key_led.bin] Error 1[root@localhost 9.key_led]# 

而代码就是这样,很简单
int main(){
int a = 3, b = 5, c = 0; c = a/b;
}只要出现了除法就报错了。
我看了有人在前面加一个#include <stdio.h>就能够编译过,
即:
#include <stdio.h>
int main(){
......
}
而且还可以使用printf函数等等,为什么我的不行?我的使用printf的话会提示undefined reference to `printf'我看了也不像是找不到stdio.h,因为我把 stdio.h 改成 aaa.h 的话会明显提示fatal error: aaa.h: No such file or directory,而没有提示stdio.h  No such file or directory.


怎么排版全乱了,不能够传图片
级别: 新手上路
UID: 27694
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
综合积分: 22 分
注册时间: 2010-08-30
最后登录: 2016-04-09
1楼  发表于: 2013-05-31 00:32
记得是没有库文件, 连接时加“-lgcc"试试;
另外还需要自己新加以下这些函数; 自己试试吧
24 /* Replacement (=dummy) for GNU/Linux division-by zero handler */
25 void __div0 (void)
26 {
27     extern void hang (void);
28
29 //  hang();
30 }
31
32 /* add functions to be compiled by CodeSourcery Toolchain */
33 void __aeabi_ldiv0 (void)
34 {
35     extern void hang (void);
36
37 //  hang();
38 }
39 void raise(void) {
40 }