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

 
 
 
Reply to this topicStart new topic
> IAR Error[Li005]: no definition for ... Помогите, Линкер не видет функции в соседнем файле *.c
NeoMage
сообщение Jun 5 2012, 17:42
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 5-06-12
Пользователь №: 72 183



IAR для STM8.
Написал себе библиотеку для работы с UART2 (uart2.h, uart2.c)
Создаю новый проект, включаю в него:
main.c
uart2.h - описания функий для работы с UART
uart2.c - сами функции для работы с UART
Все файлы добавлены в проект и лежат в одном каталоге.

В main.c пишу #include "uart2.h" и дальше использую функции UART2

Компилируется без ошибок но при сборке ругается на все используемые функции из uart2.c:
Error[Li005]: no definition for "uart2_write" [referenced from ...\Debug\Obj\main.o] ... и т.д.
Получается линкер ищет эти функции в main.o а не в uart2.o

Если в main.с добавить #include "uart2.c", то все работает.

В AVR Studio так делал постоянно: блоки переферии выносил в отдельные файлы и инклудил их при необходимости.

Как в IAR так-же сделать? Подскажите пожалуйста.

Сообщение отредактировал NeoMage - Jun 5 2012, 17:43
Прикрепленные файлы
Прикрепленный файл  UART_Example.zip ( 6.15 килобайт ) Кол-во скачиваний: 28
 
Go to the top of the page
 
+Quote Post
alag57
сообщение Jun 5 2012, 18:22
Сообщение #2


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

Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355



а если так?
#define USE_UART2 1
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jun 5 2012, 18:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



При компиляции файла uart2.c USE_UART2 не определено и вы по сути компилируете пустой файл. В результате не получаете в объектном файле всего что надекларировали в хидере.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 6 2012, 04:02
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(NeoMage @ Jun 5 2012, 20:42) *
Error[Li005]: no definition for "uart2_write" [referenced from ...\Debug\Obj\main.o] ... и т.д.
Получается линкер ищет эти функции в main.o а не в uart2.o

Ну нет же! В main всего лишь вызов этой функции, об этом линкер и напоминает.
Что-то не то у Вас с включением файла uart2 в проект. Может, стоит галка запрета.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
alag57
сообщение Jun 6 2012, 04:38
Сообщение #5


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

Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355



Код
#define USE_UART2
в файле main.c
а в файле uart2.c
Код
#ifdef USE_UART2

надо перенести define в файл uart2.h, как общий для main.c и uart2.c

Go to the top of the page
 
+Quote Post
SSerge
сообщение Jun 6 2012, 04:46
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



В файле uart2.c есть такие строчки:
#ifdef USE_RX2
#ifdef USE_TX2
а сами USE_RX2 и USE_TX2 нигде не определены.

Прототипы функций uart2_write и других объявлены в uart2.h, поэтому компиляция проходит без проблем, а при сборке выясняется что таких функций нигде нет.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 6 2012, 05:09
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Проект то я и не заметил.

Автор, точно сами библиотеку писали?
Потому как поставили условие компиляции, а дифайна нет.

Во первых, в свойствах проекта укажите этот злочастный USE_UART2
Во вторых незачем в проект включать хедеры
В третьих научитесь правильно определять и объявлять переменные в проектах со многими файлами.
В четвертых обратите внимание на предупреждения, проверка >=0 любого беззнакового числа дает положительный результат
ну и прочее.

Исправленный проект прилагаюПрикрепленный файл  2.ZIP ( 6.23 килобайт ) Кол-во скачиваний: 238


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
NeoMage
сообщение Jun 6 2012, 06:19
Сообщение #8





Группа: Новичок
Сообщений: 5
Регистрация: 5-06-12
Пользователь №: 72 183



Всем спасибо. Все исправил. Все заработало.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 02:18
Рейтинг@Mail.ru


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