Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: error: undefined reference to '__udivsi3'
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
jb83
Здравствуйте!

Подскажите, пжалста, что это такое и чем лечится 05.gif
WinARM
aesok
Цитата(jb83 @ Jun 6 2008, 10:14) *
Здравствуйте!

Подскажите, пжалста, что это такое и чем лечится 05.gif
WinARM


КОД! И makefile. Версия компилятора. Короче я не экстрасенс.

Анатолий.
jb83
Вот процедура, на которую ругается (алгоритм отвратный и незаконченный rolleyes.gif )
-------------------------------------------------------------------------------------
void line (unsigned int x0, unsigned int y0,
unsigned int x1, unsigned int y1, unsigned int c){
unsigned int x = x0;
unsigned int y = y0;

int dx = x1 - x0;
int dy = y1 - y0;
int k = 0;

if (dx==0){
while (y != y1+1){
putpixel(x,y,c);
y++;
}
return;
}

if (dy==0){
while (x != x1+1){
putpixel(x,y,c);
x++;
}
return;
}
// если вышеперечисленные условия не выполняются (иначе будет деление на 0), то
// считаем коэф-т наклона линии
if (dy>=dx){
k = dy/dx;
while (y != y1+1){
x = x0 + (y-y0)/k;
putpixel(x,y,c);
y++;
}
return;
}

else {
k = dx/dy;
while (x != x1+1){
y = y0 + (x-x0)/k;
putpixel(x,y,c);
x++;
}
return;
}
}
-------------------------------------------------------------------------------------

+ makefile
-------------------------------------------------------------------------------------
NAME = uart_test

CC = arm-elf-gcc
LD = arm-elf-ld -v
AR = arm-elf-ar
AS = arm-elf-as
CP = arm-elf-objcopy
OD = arm-elf-objdump

CFLAGS = -c -mthumb-interwork -O3
AFLAGS = -ahls -mapcs-32 -o crt.o
LFLAGS = -Map main.map -Tflash.cmd
CPFLAGS = -O ihex
ODFLAGS = -dStl -x --syms -S

OBJECTS = crt.o crc16.o VIClowlevel.o uart.o main.o

all: main.out
@ echo "...copying"
$(CP) $(CPFLAGS) main.out main.hex
$(OD) $(ODFLAGS) main.out > main.dmp

clean:
-rm $(OBJECTS) crt.lst main.lst main.out main.hex main.map main.dmp


main.out: $(OBJECTS) flash.cmd
@ echo "..linking"
$(LD) $(LFLAGS) -o main.out $(OBJECTS)

crc16.o: crc16.c
@ echo ".compiling"
$(CC) $(CFLAGS) crc16.c

VIClowlevel.o: VIClowlevel.c
@ echo ".compiling"
$(CC) $(CFLAGS) VIClowlevel.c

crt.o: crt.s
@ echo ".assembling"
$(AS) $(AFLAGS) crt.o crt.s > crt.lst

main.o: main.c
@ echo ".compiling"
$(CC) $(CFLAGS) main.c

uart.o: uart.c
@ echo ".compiling"
$(CC) $(CFLAGS) uart.c
Aleksandr Baranov
Могу предположить, что не хватает какой-то библиотеки, например, libm.
klen
__udivsi3

беззнаковое деление int / int
именно та что нужна лежит в библе interwork\libgcc.a, видимо собрано криво

скачайте мою сборку , если не поможет то поправлю трабл.
Aleksandr Baranov
А где в приведенном make файле -lgcc? Его не нужно указывать явно как флаг линкера?
jb83
Цитата(klen @ Jun 6 2008, 23:10) *
__udivsi3

беззнаковое деление int / int
именно та что нужна лежит в библе interwork\libgcc.a, видимо собрано криво

скачайте мою сборку , если не поможет то поправлю трабл.


А можно ... э-э .. ссылочку?

Цитата(Aleksandr Baranov @ Jun 7 2008, 04:28) *
А где в приведенном make файле -lgcc? Его не нужно указывать явно как флаг линкера?


Извиняюсь за глупый вопрос (хотя в ветке для чайников, наверно, можно smile.gif )

То есть нужно сделать LFLAGS = -Map main.map -Tflash.cmd -lgcc ?
Aleksandr Baranov
Попробуйте LFLAGS += -lgcc -lm
klen
-lgcc сам компиллер засунет по умолчанию если вы ему не скажете обратноте явно/ Роверить можно так - суете флаг -v и смотрите детальный вывод
Aleksandr Baranov
Цитата(klen @ Jun 7 2008, 11:26) *
-lgcc сам компиллер засунет по умолчанию если вы ему не скажете обратноте явно/ Роверить можно так - суете флаг -v и смотрите детальный вывод


Для этого надо компиллеру поручить также и линковку флагом Wl
jb83
Цитата(Aleksandr Baranov @ Jun 7 2008, 16:28) *
Попробуйте LFLAGS += -lgcc -lm


Спасибо, я попробую.
amw
Цитата(jb83 @ Jun 9 2008, 09:24) *
Спасибо, я попробую.

Боюсь не сработает.
-lgcc вроде как должна ити последней.
Код
.....
LIBS -lc -lgcc
main.out: $(OBJECTS) flash.cmd
@ echo "..linking"
$(LD) $(LFLAGS) -o main.out $(OBJECTS) $(LIBS)

Или как вриант
Код
LD = arm-elf-gcc
jb83
Цитата(Aleksandr Baranov @ Jun 7 2008, 16:28) *
Попробуйте LFLAGS += -lgcc -lm


Попробовал sad.gif

cannot find -lgcc
amw
Цитата(jb83 @ Jun 10 2008, 08:25) *
Попробовал sad.gif

cannot find -lgcc

Ну тогда еще -L/path/to/dir/where/you/found/it
Поищите файл libgcc.a и добавте путь к ней линкеру.
А если ее нет - то у Вас боооольшая проблема в инсталляции.
jb83
Цитата(amw @ Jun 10 2008, 08:53) *
Ну тогда еще -L/path/to/dir/where/you/found/it
Поищите файл libgcc.a и добавте путь к ней линкеру.
А если ее нет - то у Вас боооольшая проблема в инсталляции.


А просто скинуть libgcc.a в директорию с проектом не прокатывает? (я так сделал)

А путь -L/path/to/dir/where/you/found/it добавить в LFLAGS?
Aleksandr Baranov
Цитата(jb83 @ Jun 10 2008, 03:05) *
А просто скинуть libgcc.a в директорию с проектом не прокатывает? (я так сделал)

А путь -L/path/to/dir/where/you/found/it добавить в LFLAGS?


И получилось?
amw
Цитата(jb83 @ Jun 10 2008, 10:05) *
А просто скинуть libgcc.a в директорию с проектом не прокатывает? (я так сделал)

А путь -L/path/to/dir/where/you/found/it добавить в LFLAGS?

Да.
Хотя вообще-то переменную для флагов линкера принято называть LDFLAGS.
Именно это имя используется во многих случаях для нахождения флагов линкера по умолчанию. Ну еще:
CPP - C прероцессор
CC - C компилятор
CXX - C++ компилятор
AS - ассемблер
LD - линкер
CPPFLAGS - флаги C прероцессора
CCFLAGS - флаги C компилятора
CXXFLAGS - флаги C++ компилятора
ASFLAGS - флаги ассемблера
LDFLAGS - флаги линкера
Может пригодится в будущем.
jb83
Всем спасибо за участие! a14.gif
Вроде слинковалось smile.gif

1. В папке, куда он лазил за библиотеками, libgcc.a не было. laughing.gif Я положил.

2. Заработало с конструкцией, предложенной amw
Код
.....
LIBS [b]=[/b] -lc -lgcc
main.out: $(OBJECTS) flash.cmd
@ echo "..linking"
$(LD) $(LFLAGS) -o main.out $(OBJECTS) $(LIBS)


А вот
Код
LFLAGS += -lgcc -lm
работать не захотел sad.gif

3. Кстати, появились warning'и:
Warning: c:\winarm\bin\../arm-elf/lib\libgcc.a (_udivsi3.o) does not support interworking, whereas main.out does
Warning: c:\winarm\bin\../arm-elf/lib\libgcc.a (_dvmd_tls.o) does not support interworking, whereas main.out does
klen
ну че? осилили?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.