|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:26 am
|
Страница 1 от 1
|
[ 13 мнения ] |
|
RQ:AVR,GCC:"Error:multiple definition..." &ДРУ
| Автор |
Съобщение |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
 RQ:AVR,GCC:"Error:multiple definition..." &ДРУ
RQ: AVR, GCC: "Error: multiple definition of blabla"
Правя проект, добавям C и H файл и на всяка дефиниця в H файла ми дава тая грешка (но я пoказва, че е в O файла)
Що я дава тая грешка? Какво не съм направил както трябва?
Направих отделен проект да го пробвам.
Ако махна моите файлове и добавя други C и H файлове - няма проблем  . Явно, познава, че аз съм ги писал
И трите файла са на картинката тука. Поствам и прикрепен проект (най-долу).
Последна промяна NikB на Съб Мар 19, 2011 8:24 pm, променена общо 2 пъти
|
| Съб Мар 19, 2011 4:31 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
какво има да се чудиш - това явно е грешка на линкера - всеки път като включиш H в някой C - дефинираш тая променлива
много тъп начин на дефиниране си избрал (не ти е виновен компилатора/линкера!)
|
| Съб Мар 19, 2011 4:46 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
махни #include "EncodePho.h" от единия *.с файл
|
| Съб Мар 19, 2011 4:53 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Поне една читава книжка за С нямаш ли?
EncodePho.h:
EncodePho.c:
Всичко в хедърите трябва да е extern. Темата е дъвкана поне 100 пъти!
Последна промяна tolstolob на Съб Мар 19, 2011 5:09 pm, променена общо 1 път
|
| Съб Мар 19, 2011 5:01 pm |
|
 |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
Благодаря, но 1. Има #ifndef ENCODEPHO_H_ #define ENCODEPHO_H_ ... #endif /* ENCODEPHO_H_ */ 2. По същия начин са дефинирани и lcd_lib.c и lcd_lib.h, а не дават грешки, като ги добавя ползвам в проекта.
A по-острият начин какъв е?
|
| Съб Мар 19, 2011 5:07 pm |
|
 |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
 Re: Поне една читава книжка за С нямаш ли?
Благодаря! Имам маса книжки, не зная кое е съществено  .
Даже МНОГО благодаря  !
|
| Съб Мар 19, 2011 5:13 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
 |  |  |  | NikB написа: Благодаря, но 1. Има #ifndef ENCODEPHO_H_ #define ENCODEPHO_H_ ... #endif /* ENCODEPHO_H_ */ 2. По същия начин са дефинирани и lcd_lib.c и lcd_lib.h, а не дават грешки, като ги добавя ползвам в проекта. A по-острият начин какъв е? |  |  |  |  |
дефинициите като - ENCODEPHO_H_ не са глобални !
по-острите начини са ти ги написали по-горе !
|
| Съб Мар 19, 2011 5:51 pm |
|
 |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
 Още нещо (по темата) да питам
Благодаря ти, но какъв е смисъла от тях тогава? Да ограничават да не се дублират include в един файл?  странно, ако може да изкажа позиция:)
---------------------
Още нещо (по темата) да питам, относно
Къде, в H или в C файла или на двете места да сложа volatile (не желая да се опитва да оптимизира, преди да съм изчел подробно за оптимизации  )
(както е указано по-горе:
в H:
extern uint8_t enphDDE[];
в C:
uint8_t enphDDE[4] = {DDE4, DDE5, .... };
)
|
| Съб Мар 19, 2011 6:11 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
На двете места.
|
| Съб Мар 19, 2011 6:25 pm |
|
 |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
Хронично, за трети път (поне), ме спасяваш бързо и точно. Благодаря!
Последна промяна NikB на Съб Мар 19, 2011 8:43 pm, променена общо 1 път
|
| Съб Мар 19, 2011 8:42 pm |
|
 |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
 iom128.h - къде и кога се дефинира и т.н.
Да продължа с питанките, който ги няма (или трудно се намират) в книгите:
iom128.h - къде и кога се дефинира и т.н.:
Постановка на задачата:
GCC с Avr studio 5 (едва ли в тая част има разлика с 4)
Изтеглих един проект от мрежата, но не е означен процесорът. Избрах си Atmega128.
Имаше две предупреждения "appears to be a misspelled signal handler" (за SIG_USART_DATA и за SIG_USART_RECV).
Напсувах ги и видях, че в iom128.h тия вектори са декларирани по три начина. С USART0_UDRE_vect и USART0_RX_vect предупрежденията се оправиха  .
Като щтракна на USART0_UDRE_vect и избера "find definition" ми се отваря iom128.h.
Потърсих (с "Find in solution") къде в проекта ми е деклариран iom128.h и не го намерих.
И ПИТАНКАТА
Как компилаторът и линкерът стигат до това чудо iom128.h и ИМА ЛИ НАЧИН като търся с "Find..." да търся в същите файлове, до които има връзка проекта ми?
|
| Съб Мар 19, 2011 8:42 pm |
|
 |
|
Cino
Ранг: Новодошъл
Регистриран на: Чет Окт 02, 2008 10:24 pm Мнения: 105
|
трябва да инклуднеш в проекта си фаила <io.h>
#include <io.h>
който се намира примерно в "C:\WinAVR-20100110\avr\include\avr"
да зададеш на авр студиото къде да си търси инклуде директорията.
да зададеш в configuration options на проекта кой контролер ползваш
тогава компилатора си дефинира дефиниция указваща типа на контролера
примерно "__AVR_ATmega128__", и от този файл io.h, си инклудва съответния
IO файл за контролера който ползваш. от същата тази папка
примерно "iom128.h"
EDIT:
а можеш да търсиш в файловете като ги инклуднеш в дървото на проекта , в AVR Studio, и след това компилираш
така само ако са инкулуднати като фаилове не търси в тях наистина
Последна промяна Cino на Съб Мар 19, 2011 9:25 pm, променена общо 1 път
|
| Съб Мар 19, 2011 9:04 pm |
|
 |
|
NikB
Ранг: Почетен член
Регистриран на: Съб Сеп 25, 2004 10:32 pm Мнения: 710
|
Да, така съм го направил (при създаване на проекта съм указал девайс).
Иначе нямаше да ми покаже, че взема векторите от iom128.h.
Но не разбирам как това отговаря на въпросите ми  .
ПП
Пардон - отговаря на първия въпрос, значи не ми е ясен само отговора на втория въпрос  .
И не е ясно защо за някои от начина на дефиниране на векторите в iom128.h стават предупреждения.
|
| Съб Мар 19, 2011 9:10 pm |
|
|
|
Страница 1 от 1
|
[ 13 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|