Перейти к содержанию
    

error: undefined reference to '__udivsi3'

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

 

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

WinARM

Изменено пользователем jb83

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

WinARM

 

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

 

Анатолий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот процедура, на которую ругается (алгоритм отвратный и незаконченный :rolleyes: )

-------------------------------------------------------------------------------------

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

__udivsi3

 

беззнаковое деление int / int

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

__udivsi3

 

беззнаковое деление int / int

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

 

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

 

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

 

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

 

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

 

То есть нужно сделать LFLAGS = -Map main.map -Tflash.cmd -lgcc ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

-lgcc сам компиллер засунет по умолчанию если вы ему не скажете обратноте явно/ Роверить можно так - суете флаг -v и смотрите детальный вывод

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

-lgcc сам компиллер засунет по умолчанию если вы ему не скажете обратноте явно/ Роверить можно так - суете флаг -v и смотрите детальный вывод

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Боюсь не сработает.

-lgcc вроде как должна ити последней.

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

Или как вриант

LD = arm-elf-gcc

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал :(

 

cannot find -lgcc

Ну тогда еще -L/path/to/dir/where/you/found/it

Поищите файл libgcc.a и добавте путь к ней линкеру.

А если ее нет - то у Вас боооольшая проблема в инсталляции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну тогда еще -L/path/to/dir/where/you/found/it

Поищите файл libgcc.a и добавте путь к ней линкеру.

А если ее нет - то у Вас боооольшая проблема в инсталляции.

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...