In function `lcd_draw_circle': lcd.c:(.text+0x2d8): undefined reference to `__aeabi_idiv' lcd

環境 VMware® Workstation 9.0.2 build-1031769

gcc (GCC) 4.6.0 20110428 (Red Hat 4.6.0-6)@fedora15
arm-none-linux-gnueabi-gcc (ctng-1.6.1) 4.4.3

arm926裸機開發


// 繪製同心圓
void lcd_draw_circle(void)
{
int x,y;
int color;
unsigned char red,green,blue,alpha;
int xsize = ROWSIZE;
int ysize = COLSIZE;


for (y = 0; y < ysize; y++)
for (x = 0; x < xsize; x++)
{
color = ((x-xsize/2)*(x-xsize/2) + (y-ysize/2)*(y-ysize/2))/64;
red   = (color/8) % 256;
green = (color/4) % 256;
blue  = (color/2) % 256;
alpha = (color*2) % 256;
color |= ((int)red   << 11);
color |= ((int)green << 5 );
color |= ((int)blue       );


lcd_draw_pixel(x,y,color);
}
}

color = ((x-xsize/2)*(x-xsize/2) + (y-ysize/2)*(y-ysize/2))/64;

改爲:

color = ((x-xsize/2)*(x-xsize/2) /25+ (y-ysize/2)*(y-ysize/2)/9);

報錯,錯誤信息:

lcd.o: In function `lcd_draw_circle':

lcd.c:(.text+0x2d8): undefined reference to `__aeabi_idiv'

lcd.c:(.text+0x2e4): undefined reference to `__aeabi_idiv'


猜測可能是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

__aeabi_uidiv在libgcc.a裏面,
ld這個.a就OK了

發佈了19 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章