|
link не видит inline функций, IAR6 + eclipse |
|
|
|
Mar 30 2012, 12:28
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 30-03-12
Пользователь №: 71 103

|
Появилось некоторое время чтобы скрестить eclipse c IARом, переношу готовый проект под эту среду. Все бы ничего , но линкер при сборке не находит в объектных файлах inline функций (они целиком, как положено находятся во включаемых h-файлах). Чего то я понять не могу чего ему от меня надо. В документации вижу фигу. Кто сталкивался? Подскажите какие волшебные слова ему сказать надо? Хелп ми.
|
|
|
|
|
Mar 30 2012, 12:37
|
Участник

Группа: Участник
Сообщений: 55
Регистрация: 28-11-11
Пользователь №: 68 553

|
Цитата(mronetwo @ Mar 30 2012, 16:28)  Появилось некоторое время чтобы скрестить eclipse c IARом, переношу готовый проект под эту среду. Все бы ничего , но линкер при сборке не находит в объектных файлах inline функций (они целиком, как положено находятся во включаемых h-файлах). Чего то я понять не могу чего ему от меня надо. В документации вижу фигу. Кто сталкивался? Подскажите какие волшебные слова ему сказать надо? Хелп ми. Если GCC, то там вроде inline объявляется как static inline, тут.
|
|
|
|
|
Mar 30 2012, 12:43
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 30-03-12
Пользователь №: 71 103

|
Цитата(Непомнящий Евгений @ Mar 30 2012, 16:34)  Приведи минимальный пример. Ни разу не сталкивался... Минимальный пример чего? inline функции? Цитата(shmur @ Mar 30 2012, 16:37)  Если GCC, то там вроде inline объявляется как static inline, тут. эээ. Не GCC , нет. IAR/ Если я как static функцию опишу в h-файл ее не включишь.
|
|
|
|
|
Mar 30 2012, 13:03
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 30-03-12
Пользователь №: 71 103

|
Я прям не знаю... в файле bipper.c из функции bip_out вызываем функцию bip_pwmout(sound_freq) вот так: Код #include "bipper_pwm.h" .... char bip_out (int state) { .... bip_pwmout(sound_freq); ... } В файле bipper_pwm.h описываем вызываемую функцию: Код #include "pwm.h"
inline void bip_pwmout ( u32 sound_frequency ) { pwm_output(AT91C_PWMC_CHID3, (MCK / sound_frequency / 2), (MCK / sound_frequency)); } функция pwm_output описана в файле pwm.h, тело находится в pwm.c, подключенном к проекту В результате получается ошибка Код [Li005] no definition for bip_pwmout referenced from bipper.o Такой минимальный пример сойдет?
|
|
|
|
|
Mar 30 2012, 13:13
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 30-03-12
Пользователь №: 71 103

|
Цитата(Непомнящий Евгений @ Mar 30 2012, 17:09)  Вроде бы ничего криминального.
Попробуй посмотреть на результат препроцесора biper.c, там точно есть inline void bip_pwmout() вместо с телом? А что если его нет? Такое как может быть? Сугубо под IARом компилиться без проблем.
|
|
|
|
|
Mar 30 2012, 13:19
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(mronetwo @ Mar 30 2012, 17:13)  А что если его нет? Такое как может быть? Чтобы он появился, надо поставить какую-то галку в настройках проекта. Цитата Сугубо под IARом компилиться без проблем. В смысле без проблем? Ты ж говоришь - ошибка линковки...
|
|
|
|
|
Mar 30 2012, 13:31
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 30-03-12
Пользователь №: 71 103

|
Цитата(Непомнящий Евгений @ Mar 30 2012, 17:19)  Чтобы он появился, надо поставить какую-то галку в настройках проекта. Уже завтра поищу. Куда вообще эта сволочь девает объектники? В папке проекта не нашел. Цитата(Непомнящий Евгений @ Mar 30 2012, 17:19)  В смысле без проблем? Ты ж говоришь - ошибка линковки... Если пользоваться IARовской средой - все нормально. Это тот же проект, но под eclipse+iar. Видимо eclipse еще что то хочет, вот только что?
|
|
|
|
|
Apr 3 2012, 05:16
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 30-03-12
Пользователь №: 71 103

|
Вобщем бедовый какой-то этот эклипс, оказывается проект не билдился нормально вообще. Система сборки эклипс выдавала ошибку, причем непонятно какую, а я по непытности сразу этого не понял. Тыканем во всякое понял что подцепил в разных папках два файла с одинаковыми именами. Самое смешное что даже если удалить в одном месте эти файлы, собрать проект все рано невозможно. Даже если удалить проблемную папку из проекта, а потом подцепить снова. Clean ни из среды ни вручную не помогает. пришлось переименовать папку из которой удалил файлы и все собралось. Однако.
|
|
|
|
|
Apr 4 2012, 06:14
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 30-03-12
Пользователь №: 71 103

|
Да вот еще. На вкладке свойств compiler/language не стоит забывать про Use C++ inline semantics.
|
|
|
|
|
Apr 4 2012, 07:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(mronetwo @ Mar 30 2012, 15:43)  Если я как static функцию опишу в h-файл ее не включишь. С чего это вдруг? Эта функция будет видна в каждой единице трансляции, где включается файл, причём независимо от других таких же единиц. А вот без static линкер должен ругаться на множественное определение функции. Цитата На вкладке свойств compiler/language не стоит забывать про Use C++ inline semantics. Если проект на языке Си, ничего плюсового быть не должно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|