Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: WinAVR: undefined reference to `__mulhi3'
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
koluna
Здравствуйте!

WinAVR 20071221.
CodeBlocks 8.02.

Использую в своём проекте функцию sprintf().
В результате получаю сообщения вида:
Цитата
C:\WinAVR\avr\lib\libprintf_flt.a(vfprintf_flt.o)||In function `vfprintf':(.text+0xd6)||undefined reference to `__mulhi3'
C:\WinAVR\avr\lib\libprintf_flt.a(vfprintf_flt.o)||In function `vfprintf':(.text+0xe8)||undefined reference to `__mulhi3'
C:\WinAVR\avr\lib\libc.a(strtod.o)||In function `strtod':(.text+0x1d8)||undefined reference to `__mulhi3'


Последняя версия WinAVR выдаёт такиеже ошибки.

В чём может быть дело?

Благодарю заранее!

Причём на другой машине с тем же WinAVR и CodeBlocks всё нормально собирается!
Железо виновато или конфликт ПО?
_Pasha
Makefile надо глянуть.
koluna
Нету его.
C::B его сам на лету делает...
Странно то, что ПО одинаковое и проект один и тот же, но компилируется не на всех машинах...
_Pasha
Код
-Wl,-u,vfprintf -lprintf_min
-Wl,-u,vfprintf -lprintf_flt

Что из этого в логах печатается?
Вообще, явно дело в ключах линкера

ЗЫ судя по строчке
Цитата
C:\WinAVR\avr\lib\libprintf_flt.a

у Вас должон использоваться -Wl,-u,vfprintf -lprintf_flt т.е. полноплавающий принтф.
koluna
Где бы ещё посмотреть эти логи...
Не знаю... В том, что выводится на экран вообще никаких ключей нет.
_Pasha
View/Logs включили панель логов
Правой кнопкой мыши на заголовке окна - выбрать меню Toggle/Build Log
При включенном отображается вкладка - там все нужное должно быть написано. Еще где-то в настройках можно включить генерацию *.htm с логом. Не помню где - у меня другая беда - немогу выключить smile.gif
MrYuran
Цитата(n_bogoyavlensky @ Nov 25 2009, 11:38) *
Где бы ещё посмотреть эти логи...

Нажмите для просмотра прикрепленного файла
В свойствах проекта можно указать, чтобы логи сохранялись в отдельном файле
koluna
Цитата(_Pasha @ Nov 25 2009, 11:46) *
View/Logs включили панель логов
Правой кнопкой мыши на заголовке окна - выбрать меню Toggle/Build Log
При включенном отображается вкладка - там все нужное должно быть написано.


Понял. Эти логи я всегда при компиляции включаю по F2 smile.gif
Вот только нету в этих логах вызова компилятора у меня почему-то!
Привожу логи.

Цитата
Еще где-то в настройках можно включить генерацию *.htm с логом. Не помню где - у меня другая беда - немогу выключить smile.gif


Очень интересно, поищем smile.gif
MrYuran
settings->compiler and debugger settings
->other settings:
compiler logging: full comand line (у вас, по-видимому, стоит task description)
_Pasha
libm.a юзается? Если нет - вполне ожидаемый результат. Скормите ее линкеру
koluna
Цитата(MrYuran @ Nov 25 2009, 12:52) *
settings->compiler and debugger settings
->other settings:
compiler logging: full comand line (у вас, по-видимому, стоит task description)


Именно. Спасибо большое smile.gif
Вот нормальный лог.

И вот что мы видим в логе:
Цитата
-Wl,-u,vfprintf,-lprintf_flt


Цитата(_Pasha @ Nov 25 2009, 12:57) *
libm.a юзается? Если нет - вполне ожидаемый результат. Скормите ее линкеру


Пытаюсь скормить... не принимает...
Вот ключи линкера:
Цитата
-mmcu=atmega1280
-Wl,-Map=$(TARGET_OUTPUT_FILE).map,--cref
-Wl,-u,vfprintf,-lprintf_flt,-llibm.a
-Wl,--section-start,.data=0x802200,--defsym=__heap_end=0x805E00


Раньше вместо -llibm.a было -lm.
Может не надо было его убирать, а добавить отдельной строкой?
Из какой папки нужен libm.a? В WinAVR их несколько, видимо, зависит от платформы...
Кстати, по поводу порядка включения библиотек ключом -l: в каком порядке?

С такими ключами пишет, что не нашёл библиотеку libm.a.
MrYuran
Цитата(n_bogoyavlensky @ Nov 25 2009, 13:22) *
Раньше вместо -llibm.a было -lm.

правильно как раз -lm, что подразумевает подключение файла библиотеки libm.a
хотя, по-моему, это чистая математика типа sin/cos, ln, x^y и прочая. К принтф никаким боком.
koluna
Судя по:
Цитата
-LC:\WinAVR\avr\lib

там и ищет...
А зачем тогда дирректории типа \avr?

Цитата(MrYuran @ Nov 25 2009, 13:29) *
правильно как раз -lm, что подразумевает подключение файла библиотеки libm.a
хотя, по-моему, это чистая математика типа sin/cos, ln, x^y и прочая. К принтф никаким боком.


Ну да. Разобрался. -lm как раз подключает libm.a.
Только вот ошибка не исчезла от этого sad.gif((
koluna
Очень странно: релизом WinAVR 20060421 у меня наконец-то собрался проект...
Но почему на моей машине не хочет релиз 20071221 работать, а на другой он работает?
koluna
Бага сидит здесь: avr-g++.exe -LC:\WinAVR\avr\lib
Пофиксил smile.gif

Это была неправильная настройка Code::Blocks...

Причём, очень интересная... Сначала я ставил WinAVR, потом C::B.
C::B автоматически опознал WinAVR и добавил пути себе в параметры компилятора и линкера.
Для линкера путь оказался неправильным!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.