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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> link не видит inline функций, IAR6 + eclipse
mronetwo
сообщение Mar 30 2012, 12:28
Сообщение #1


Участник
*

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



Появилось некоторое время чтобы скрестить eclipse c IARом, переношу готовый проект под эту среду. Все бы ничего , но линкер при сборке не находит в объектных файлах inline функций (они целиком, как положено находятся во включаемых h-файлах).
Чего то я понять не могу чего ему от меня надо. В документации вижу фигу. Кто сталкивался? Подскажите какие волшебные слова ему сказать надо? Хелп ми.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Mar 30 2012, 12:34
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Приведи минимальный пример. Ни разу не сталкивался...
Go to the top of the page
 
+Quote Post
shmur
сообщение Mar 30 2012, 12:37
Сообщение #3


Участник
*

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



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


Если GCC, то там вроде inline объявляется как static inline, тут.
Go to the top of the page
 
+Quote Post
mronetwo
сообщение Mar 30 2012, 12:43
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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-файл ее не включишь.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Mar 30 2012, 12:59
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(mronetwo @ Mar 30 2012, 16:43) *
Минимальный пример чего? inline функции?


Минимальный пример программы, которая выдает ошибку линковки. Вместе с самой ошибкой
Go to the top of the page
 
+Quote Post
mronetwo
сообщение Mar 30 2012, 13:03
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 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


Такой минимальный пример сойдет?
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Mar 30 2012, 13:09
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Вроде бы ничего криминального.

Попробуй посмотреть на результат препроцесора biper.c, там точно есть inline void bip_pwmout() вместо с телом?
Go to the top of the page
 
+Quote Post
mronetwo
сообщение Mar 30 2012, 13:13
Сообщение #8


Участник
*

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



Цитата(Непомнящий Евгений @ Mar 30 2012, 17:09) *
Вроде бы ничего криминального.

Попробуй посмотреть на результат препроцесора biper.c, там точно есть inline void bip_pwmout() вместо с телом?


А что если его нет? Такое как может быть?

Сугубо под IARом компилиться без проблем.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Mar 30 2012, 13:19
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(mronetwo @ Mar 30 2012, 17:13) *
А что если его нет? Такое как может быть?


Чтобы он появился, надо поставить какую-то галку в настройках проекта.

Цитата
Сугубо под IARом компилиться без проблем.

В смысле без проблем? Ты ж говоришь - ошибка линковки...
Go to the top of the page
 
+Quote Post
mronetwo
сообщение Mar 30 2012, 13:31
Сообщение #10


Участник
*

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



Цитата(Непомнящий Евгений @ Mar 30 2012, 17:19) *
Чтобы он появился, надо поставить какую-то галку в настройках проекта.

Уже завтра поищу. Куда вообще эта сволочь девает объектники? В папке проекта не нашел.


Цитата(Непомнящий Евгений @ Mar 30 2012, 17:19) *
В смысле без проблем? Ты ж говоришь - ошибка линковки...

Если пользоваться IARовской средой - все нормально.

Это тот же проект, но под eclipse+iar. Видимо eclipse еще что то хочет, вот только что?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 30 2012, 14:12
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (mronetwo @ Mar 30 2012, 16:31) *
Если пользоваться IARовской средой - все нормально.

Это тот же проект, но под eclipse+iar. Видимо eclipse еще что то хочет, вот только что?
А оптимизация случаем не отключена в случае с eclipse? Помнится, при выключенной оптимизации gcc отключает встраивание. Не знаю как IAR, но может быть что-то подобное?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Mar 30 2012, 14:41
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Чего то я упустил момент про эклипс.

Сравни командные строки компилятора и линкера эклипса и ИАРа - скорее всего чего-то напутано с флагами компиляции
Go to the top of the page
 
+Quote Post
mronetwo
сообщение Apr 3 2012, 05:16
Сообщение #13


Участник
*

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



Вобщем бедовый какой-то этот эклипс, оказывается проект не билдился нормально вообще. Система сборки эклипс выдавала ошибку, причем непонятно какую, а я по непытности сразу этого не понял. Тыканем во всякое понял что подцепил в разных папках два файла с одинаковыми именами. Самое смешное что даже если удалить в одном месте эти файлы, собрать проект все рано невозможно. Даже если удалить проблемную папку из проекта, а потом подцепить снова. Clean ни из среды ни вручную не помогает. пришлось переименовать папку из которой удалил файлы и все собралось. Однако.
Go to the top of the page
 
+Quote Post
mronetwo
сообщение Apr 4 2012, 06:14
Сообщение #14


Участник
*

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



Да вот еще. На вкладке свойств compiler/language не стоит забывать про Use C++ inline semantics.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 4 2012, 07:37
Сообщение #15


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

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(mronetwo @ Mar 30 2012, 15:43) *
Если я как static функцию опишу в h-файл ее не включишь.

С чего это вдруг? Эта функция будет видна в каждой единице трансляции, где включается файл, причём независимо от других таких же единиц. А вот без static линкер должен ругаться на множественное определение функции.

Цитата
На вкладке свойств compiler/language не стоит забывать про Use C++ inline semantics.
Если проект на языке Си, ничего плюсового быть не должно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 6th August 2025 - 16:12
Рейтинг@Mail.ru


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