реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> error: undefined reference to '__udivsi3'
jb83
сообщение Jun 6 2008, 06:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 26-02-08
Из: Бердск
Пользователь №: 35 384



Здравствуйте!

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

Сообщение отредактировал jb83 - Jun 6 2008, 06:17


--------------------
чайник электрический
Go to the top of the page
 
+Quote Post
aesok
сообщение Jun 6 2008, 06:48
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(jb83 @ Jun 6 2008, 10:14) *
Здравствуйте!

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


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

Анатолий.
Go to the top of the page
 
+Quote Post
jb83
сообщение Jun 6 2008, 07:57
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 26-02-08
Из: Бердск
Пользователь №: 35 384



Вот процедура, на которую ругается (алгоритм отвратный и незаконченный 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


--------------------
чайник электрический
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Jun 6 2008, 15:15
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



Могу предположить, что не хватает какой-то библиотеки, например, libm.


--------------------
ASB
Go to the top of the page
 
+Quote Post
klen
сообщение Jun 6 2008, 20:10
Сообщение #5


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



__udivsi3

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

скачайте мою сборку , если не поможет то поправлю трабл.
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Jun 7 2008, 01:28
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



А где в приведенном make файле -lgcc? Его не нужно указывать явно как флаг линкера?


--------------------
ASB
Go to the top of the page
 
+Quote Post
jb83
сообщение Jun 7 2008, 04:44
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 26-02-08
Из: Бердск
Пользователь №: 35 384



Цитата(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 ?


--------------------
чайник электрический
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Jun 7 2008, 13:28
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



Попробуйте LFLAGS += -lgcc -lm


--------------------
ASB
Go to the top of the page
 
+Quote Post
klen
сообщение Jun 7 2008, 15:26
Сообщение #9


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



-lgcc сам компиллер засунет по умолчанию если вы ему не скажете обратноте явно/ Роверить можно так - суете флаг -v и смотрите детальный вывод
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Jun 7 2008, 18:17
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



Цитата(klen @ Jun 7 2008, 11:26) *
-lgcc сам компиллер засунет по умолчанию если вы ему не скажете обратноте явно/ Роверить можно так - суете флаг -v и смотрите детальный вывод


Для этого надо компиллеру поручить также и линковку флагом Wl


--------------------
ASB
Go to the top of the page
 
+Quote Post
jb83
сообщение Jun 9 2008, 06:24
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 26-02-08
Из: Бердск
Пользователь №: 35 384



Цитата(Aleksandr Baranov @ Jun 7 2008, 16:28) *
Попробуйте LFLAGS += -lgcc -lm


Спасибо, я попробую.


--------------------
чайник электрический
Go to the top of the page
 
+Quote Post
amw
сообщение Jun 9 2008, 17:52
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(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


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
jb83
сообщение Jun 10 2008, 05:25
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 26-02-08
Из: Бердск
Пользователь №: 35 384



Цитата(Aleksandr Baranov @ Jun 7 2008, 16:28) *
Попробуйте LFLAGS += -lgcc -lm


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

cannot find -lgcc


--------------------
чайник электрический
Go to the top of the page
 
+Quote Post
amw
сообщение Jun 10 2008, 05:53
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



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

cannot find -lgcc

Ну тогда еще -L/path/to/dir/where/you/found/it
Поищите файл libgcc.a и добавте путь к ней линкеру.
А если ее нет - то у Вас боооольшая проблема в инсталляции.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
jb83
сообщение Jun 10 2008, 07:05
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 26-02-08
Из: Бердск
Пользователь №: 35 384



Цитата(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?


--------------------
чайник электрический
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Jun 10 2008, 12:33
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



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

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


И получилось?


--------------------
ASB
Go to the top of the page
 
+Quote Post
amw
сообщение Jun 10 2008, 17:21
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(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 - флаги линкера
Может пригодится в будущем.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
jb83
сообщение Jun 11 2008, 05:55
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 26-02-08
Из: Бердск
Пользователь №: 35 384



Всем спасибо за участие! 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


Сообщение отредактировал jb83 - Jun 11 2008, 05:57


--------------------
чайник электрический
Go to the top of the page
 
+Quote Post
klen
сообщение Jun 12 2008, 03:20
Сообщение #19


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



ну че? осилили?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01554 секунд с 7
ELECTRONIX ©2004-2016