|
jacOS и WinAVR20060421 |
|
|
|
Dec 15 2006, 10:40
|
Участник

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

|
Компилирую пример из архива для версии 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 Связано ли это с тем, что библиотеки писались под более раннюю версию компилятора и, если да, то как это можно (если можно) обойти не устанавливая еще один компилятор.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 15)
|
Dec 15 2006, 10:59
|
Участник

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

|
Я взял готовый проект из примера, подключил указанную в примере библиотеку к проекту, указал дериктории. Все, больше ничего не менял.
Сообщение отредактировал Hz! - Dec 15 2006, 11:02
|
|
|
|
|
Dec 15 2006, 12:14
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(Hz! @ Dec 15 2006, 11:59)  ... указал дериктории. Все, больше ничего не менял. Попробуйте заменить \ на / Анатолий.
|
|
|
|
|
Dec 15 2006, 12:38
|
Участник

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

|
Я указывал пути в GCC-шном плагине для AVRstudio, так что снеклонными проблем быть не должно, он их там сам пишет. Русских букв, или пробелов в путях нет.
Сообщение отредактировал Hz! - Dec 15 2006, 12:39
|
|
|
|
|
Dec 15 2006, 12:42
|
Участник

Группа: Новичок
Сообщений: 44
Регистрация: 2-05-06
Пользователь №: 16 710

|
Цитата(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) не видит библиотеки. Хотя через мейк пример нормально собирается, библиотека линкуется. Это либо глюк студии, либо чегото не так делаю.
|
|
|
|
|
Dec 15 2006, 13:17
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(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... Анатолий.
|
|
|
|
|
Dec 15 2006, 14:14
|
Участник

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

|
Цитата Вы хотите указать линкёру дополнительную директорию для поиска библиотек, и должны использовать -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! - Dec 15 2006, 14:15
|
|
|
|
|
Dec 15 2006, 14:28
|
Участник

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

|
Цитата(µµC @ Dec 15 2006, 12:42)  Кстати, для -mmcu=atmega8 нужна библиотека с architecture avr4. A20ntn предназначена для архитектуры avr2. Но не в этом причина ошибки. Тоже попытался создать свой проект в avrstudio и тоже студия (498) не видит библиотеки. Хотя через мейк пример нормально собирается, библиотека линкуется. Это либо глюк студии, либо чегото не так делаю. A20ntn я поменял, спасибо, что обратили внимание. Готовый мейк у меня тоже запустился. Похоже придется переписать его под себя и довольствоваться этим, пока не найдется решение.
|
|
|
|
|
Dec 15 2006, 16:18
|
Участник

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

|
Разобрался. Фишка в том, что для того, чтобы библиотека работала правильно перед ней не должно быть ключа -l. Почему так сделано - не понятно, но это факт, а поскольку GCC-ный плагин все делает сам, втом числе и ключи ставит, то получается jacOS и AVRstudio можно связать только через внешний makefile.
|
|
|
|
|
Jan 5 2008, 04:44
|
Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 2-12-06
Из: г. Хабаровск
Пользователь №: 23 035

|
Недавно взялся за jacOS. Столкнулся всё с теми же проблемами. Сделал свой мэйк, вернее убрал опцию l из генерируемого студией мэйкфайла  И всё равно ошибки при сборке: undefind reference to OS_Cooperate_ Как исправить ошибку? Заранее благодарен
--------------------
|
|
|
|
|
Jan 5 2008, 11:07
|
Участник

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

|
Цитата(Clavyan @ Jan 5 2008, 06:44)  Недавно взялся за jacOS. Столкнулся всё с теми же проблемами. Сделал свой мэйк, вернее убрал опцию l из генерируемого студией мэйкфайла  И всё равно ошибки при сборке: undefind reference to OS_Cooperate_ Как исправить ошибку? Заранее благодарен Это у вас уже другие грабли. Посмотрите внимательнее, наверное вы какой-то хедер не подключили.
|
|
|
|
|
Jan 5 2008, 14:40
|
Участник

Группа: Validating
Сообщений: 56
Регистрация: 15-10-06
Пользователь №: 21 335

|
Цитата(Hz! @ Jan 5 2008, 14:07)  Это у вас уже другие грабли. Посмотрите внимательнее, наверное вы какой-то хедер не подключили. А можно дурацкий вопрос - "undefind reference to XXXX" обычно выдает линкер (ld в частности) и как хедер может ему помочь ? (мелкомягкие расширения прагмы не поминать) IMHO скорее или объектник забыли добавить или библиотеку хде оно (в данном случае OS_Cooperate_ живет)
|
|
|
|
|
Jan 7 2008, 01:41
|
Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 2-12-06
Из: г. Хабаровск
Пользователь №: 23 035

|
Цитата(Maddy @ Jan 6 2008, 00:40)  А можно дурацкий вопрос - "undefind reference to XXXX" обычно выдает линкер (ld в частности) и как хедер может ему помочь ? (мелкомягкие расширения прагмы не поминать) IMHO скорее или объектник забыли добавить или библиотеку хде оно (в данном случае OS_Cooperate_ живет) Спасибо, за помощь. Оказалось в мэйк файле я неправильно линковал библиотеку с функциями ОС. В итоге доработал поставляемый в примере мэйк под себя. Добавил ещё несколько модулей для компиляции и всё заработало! А хедер и впрямь не причём оказался.
--------------------
|
|
|
|
|
Nov 21 2009, 11:50
|
Группа: Новичок
Сообщений: 1
Регистрация: 20-11-09
Из: Петропавловск-Камчатский
Пользователь №: 53 745

|
Цитата(Hz! @ Dec 15 2006, 13:40)  Компилирую пример из архива для версии 1.06.0. Создал проектк, указал все дириктории, подключил нужную библиотеку. При компиляции исходники компилятся в объектные файлы, библиотечные функции тоже видятся компилятором, но при генерацыы .elf выдает ошибку
Связано ли это с тем, что библиотеки писались под более раннюю версию компилятора и, если да, то как это можно (если можно) обойти не устанавливая еще один компилятор. При использовании опции -l компилятор автоматически добавляет к имени библиотеки префикс lib и суффикс .a Я просто переименовал нужные библиотеки, добавив префикс lib, и подключил уже эти библиотеки.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|