Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: jacOS и WinAVR20060421
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Hz!
Компилирую пример из архива для версии 1.06.0. Создал проектк, указал все дириктории, подключил нужную библиотеку. При компиляции исходники компилятся в объектные файлы, библиотечные функции тоже видятся компилятором, но при генерацыы .elf выдает ошибку
Цитата
avr-gcc.exe -mmcu=atmega8 -Wl,-Map=terminal.map terminal.o uart.o -lD:\Work\terminal\A20ntn -o terminal.elf
D:\Progs\WinAVR\bin\..\lib\gcc\avr\3.4.6\..\..\..\..\avr\bin\ld.exe: cannot find -lD:\Work\terminal\A20ntn
make: *** [terminal.elf] Error 1

Связано ли это с тем, что библиотеки писались под более раннюю версию компилятора и, если да, то как это можно (если можно) обойти не устанавливая еще один компилятор.
Alex B._
тип библиотеки дефайно верно указали (наиболее частая ошибка)?
в прерываниях сервисы используете? если да, то все дефайны определили?
Hz!
Я взял готовый проект из примера, подключил указанную в примере библиотеку к проекту, указал дериктории. Все, больше ничего не менял.
aesok
Цитата(Hz! @ Dec 15 2006, 11:59) *
... указал дериктории. Все, больше ничего не менял.


Попробуйте заменить \ на /

Анатолий.
Wild007
Может опять проблема с русскими символами в путях? smile.gif
Hz!
Я указывал пути в GCC-шном плагине для AVRstudio, так что снеклонными проблем быть не должно, он их там сам пишет.
Русских букв, или пробелов в путях нет.
µµC
Цитата(Hz! @ Dec 15 2006, 11:40) *
Создал проектк, указал все дириктории, подключил нужную библиотеку.


Там есть .bat файл для компиляции и линковки. Запустите его и он нормально отработает.

Цитата(Hz! @ Dec 15 2006, 11:40) *
avr-gcc.exe -mmcu=atmega8 -Wl,-Map=terminal.map terminal.o uart.o -lD:\Work\terminal\A20ntn -o terminal.elf
D:\Progs\WinAVR\bin\..\lib\gcc\avr\3.4.6\..\..\..\..\avr\bin\ld.exe: cannot find -lD:\Work\terminal\A20ntn


Кстати, для -mmcu=atmega8 нужна библиотека с architecture avr4. A20ntn предназначена для архитектуры avr2. Но не в этом причина ошибки. Тоже попытался создать свой проект в avrstudio и тоже студия (498) не видит библиотеки. Хотя через мейк пример нормально собирается, библиотека линкуется. Это либо глюк студии, либо чегото не так делаю.
aesok
Цитата(Hz! @ Dec 15 2006, 11:40) *
Цитата

avr-gcc.exe -mmcu=atmega8 -Wl,-Map=terminal.map terminal.o uart.o -lD:\Work\terminal\A20ntn -o terminal.elf
D:\Progs\WinAVR\bin\..\lib\gcc\avr\3.4.6\..\..\..\..\avr\bin\ld.exe: cannot find -lD:\Work\terminal\A20ntn
make: *** [terminal.elf] Error 1




avr-ld --help
...
-l LIBNAME, --library LIBNAME
Search for library LIBNAME
-L DIRECTORY, --library-path DIRECTORY
Add DIRECTORY to library search path

Вы хотите указать линкёру дополнительную директорию для поиска библиотек, и должны использовать -L... вместо -l...

Анатолий.
Hz!
Цитата
Вы хотите указать линкёру дополнительную директорию для поиска библиотек, и должны использовать -L... вместо -l...

Анатолий.

здесь
Цитата
avr-gcc.exe -mmcu=atmega8 -Wl,-Map=terminal.map terminal.o uart.o -lD:\Work\terminal\A20ntn -o terminal.elf
D:\Progs\WinAVR\bin\..\lib\gcc\avr\3.4.6\..\..\..\..\avr\bin\ld.exe: cannot find -lD:\Work\terminal\A20ntn
make: *** [terminal.elf] Error 1

какра-то и указана библиотека, просто полным адресом, причем указывание расширения ничего не меняет. Попробывал с помощью директорий - результат такой же
Цитата
avr-gcc.exe -mmcu=atmega8 --output --cref -Wl,-Map=terminal.map terminal.o uart.o -L"D:\Kolya\Work\terminal\jacOS" -lA40ntn -o terminal.elf
d:\Progs\WinAVR\bin\..\lib\gcc\avr\3.4.6\..\..\..\..\avr\bin\ld.exe: cannot find -lA40ntn
make: *** [terminal.elf] Error 1
Build failed with 1 errors and 0 warnings...
Hz!
Цитата(µµC @ Dec 15 2006, 12:42) *
Кстати, для -mmcu=atmega8 нужна библиотека с architecture avr4. A20ntn предназначена для архитектуры avr2. Но не в этом причина ошибки. Тоже попытался создать свой проект в avrstudio и тоже студия (498) не видит библиотеки. Хотя через мейк пример нормально собирается, библиотека линкуется. Это либо глюк студии, либо чегото не так делаю.


A20ntn я поменял, спасибо, что обратили внимание.
Готовый мейк у меня тоже запустился. Похоже придется переписать его под себя и довольствоваться этим, пока не найдется решение.
Hz!
Разобрался.
Фишка в том, что для того, чтобы библиотека работала правильно перед ней не должно быть ключа -l. Почему так сделано - не понятно, но это факт, а поскольку GCC-ный плагин все делает сам, втом числе и ключи ставит, то получается jacOS и AVRstudio можно связать только через внешний makefile.
altlogic
Недавно взялся за jacOS. Столкнулся всё с теми же проблемами. Сделал свой мэйк, вернее убрал опцию l из генерируемого студией мэйкфайлаsmile.gif И всё равно ошибки при сборке:
undefind reference to OS_Cooperate_
Как исправить ошибку?

Заранее благодарен
Hz!
Цитата(Clavyan @ Jan 5 2008, 06:44) *
Недавно взялся за jacOS. Столкнулся всё с теми же проблемами. Сделал свой мэйк, вернее убрал опцию l из генерируемого студией мэйкфайлаsmile.gif И всё равно ошибки при сборке:
undefind reference to OS_Cooperate_
Как исправить ошибку?

Заранее благодарен

Это у вас уже другие грабли.
Посмотрите внимательнее, наверное вы какой-то хедер не подключили.
Maddy
Цитата(Hz! @ Jan 5 2008, 14:07) *
Это у вас уже другие грабли.
Посмотрите внимательнее, наверное вы какой-то хедер не подключили.

А можно дурацкий вопрос - "undefind reference to XXXX" обычно выдает линкер (ld в частности) и как хедер может ему помочь ? (мелкомягкие расширения прагмы не поминать) IMHO скорее или объектник забыли добавить или библиотеку хде оно (в данном случае OS_Cooperate_ живет)
altlogic
Цитата(Maddy @ Jan 6 2008, 00:40) *
А можно дурацкий вопрос - "undefind reference to XXXX" обычно выдает линкер (ld в частности) и как хедер может ему помочь ? (мелкомягкие расширения прагмы не поминать) IMHO скорее или объектник забыли добавить или библиотеку хде оно (в данном случае OS_Cooperate_ живет)


Спасибо, за помощь. Оказалось в мэйк файле я неправильно линковал библиотеку с функциями ОС. В итоге доработал поставляемый в примере мэйк под себя. Добавил ещё несколько модулей для компиляции и всё заработало! А хедер и впрямь не причём оказался.
DDK_EL
Цитата(Hz! @ Dec 15 2006, 13:40) *
Компилирую пример из архива для версии 1.06.0. Создал проектк, указал все дириктории, подключил нужную библиотеку. При компиляции исходники компилятся в объектные файлы, библиотечные функции тоже видятся компилятором, но при генерацыы .elf выдает ошибку

Связано ли это с тем, что библиотеки писались под более раннюю версию компилятора и, если да, то как это можно (если можно) обойти не устанавливая еще один компилятор.


При использовании опции -l компилятор автоматически добавляет к имени библиотеки префикс lib и суффикс .a Я просто переименовал нужные библиотеки, добавив префикс lib, и подключил уже эти библиотеки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.