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

 
 
> Multiple definitions, в Keil (компилер GCC)
Leen
сообщение Feb 2 2007, 06:24
Сообщение #1


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

Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343



Есть набор исходников (из проекта AT91 USB Framework - Core 1.01), в каждый Сишный файл включено неск. хидеров, в частности, usb.h... Все хидеры имеют одну и ту же структуру:

#ifndef _(имя_файла)_H
#define _(имя_файла)_H
Внутри всякие объявления, и пр.,
в том числе:
#define inline _inline
.
.
.
inline unsigned int USB_GetState(const S_usb *pUsb)
{
return (*(pUsb->pState) & 0x0000FFFF);
}
.
.
.
#endif

По идее, такая структура не должна давать глюки при включении хидера в несколько файлов проекта. Но дает на этапе линковки:

udp.o(.text+0x3188):Core/usb.h:1378: multiple definition of `USB_GetState'
enumeration_example.o(.text+0x1bf4):Core/usb.h:1378: first defined here

Уже лыжи не едут! Че ему надо???
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DASM
сообщение Feb 2 2007, 15:41
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Пардон, причем тут недоделки компилятора ??? Хидер каждый раз включается ОДИН раз, но в нем definition !!! ( а не declaration)
И при линковке имеем несколько нестатических функций с один и тем же именем, на что линковщик естественно матерится.
static - именно то что надо. Хотя если бы inline работал, то все было бы хорошо.. Надо в стандарт заглянуть, что-то я не думал про это
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:58
Рейтинг@Mail.ru


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