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

 
 
 
Reply to this topicStart new topic
> Как в IAR Собрать Проект Состоящий Из Нескольких Файлов
shasik
сообщение Sep 1 2006, 23:28
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Картина такая: проект состоит из нескольких файлов (в одном математика, в другом ввод/вывод и т.д.). В режиме отладки (best debug support) проект нормально собирается и очень даже работает, но как только ставлю оптимизацию (любую по size или speed), линкер пишет, что у него неопределенная ссылки на внешние функции. Самое удивительно, что с глобальными переменными, объявленными в разных модулях, все нормально, более того функции из некоторых файлов нормально находит, а вот некоторые файлы - ни в какую. Дошло до того, что удалив из С-шных исходников IAR-овскую и MSP-шную специфику запихнул все в Visual C++ 6.0, так вижуал сказал, что все OK. Так что дело в IAR'e. Может порядок компиляции, может просто глюк, а может я где-то грабли не заметил. Пока пришло все запихнуть нафиг в один файл, но уж больно неудобно и очень нелогично получается
Go to the top of the page
 
+Quote Post
VAI
сообщение Sep 2 2006, 05:02
Сообщение #2


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

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



а Вы сделали h-файл с прототипами функций и включаете его в те файлы, где эти функции используются?
Вы задали вопрос, но не привели примера, как и что у Вас вызывается, а мы не телепаты.
Приведите проект, в котором появляется Ваша ошибка, чтоб можно было его скомпилить и тогда можно будет ответить по существу, а иначе будут только предположения.
Весь свой проект можно не выкладывать, сделайте проект, в котором проявляется ошибка, съархивируйте его и вложите в сообщение.


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
rezident
сообщение Sep 2 2006, 21:36
Сообщение #3


Гуру
******

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



Версия IAR какая? Глобальные переменные и функции, описанные в других модулях, как extern объявляли? ИМХО проще всего, дополнив все прототипы extern, запихнуть их в один хидер. И уже этот хидер инклюдить во все модули программы по принципу "кашу маслом не испортишь". В том смысле, что прототип функции, объявленный как extern, не будет конфликтовать в другим таким же прототипом или с самой функцией, даже если они встретятся в одном файле.
А вообще VAI правильно заметил: Код в студию! Ну и ошибки компилятора тоже.
Go to the top of the page
 
+Quote Post
shasik
сообщение Sep 3 2006, 00:29
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Цитата(rezident @ Sep 3 2006, 00:36) *
Версия IAR какая? Глобальные переменные и функции, описанные в других модулях, как extern объявляли? ИМХО проще всего, дополнив все прототипы extern, запихнуть их в один хидер. И уже этот хидер инклюдить во все модули программы по принципу "кашу маслом не испортишь". В том смысле, что прототип функции, объявленный как extern, не будет конфликтовать в другим таким же прототипом или с самой функцией, даже если они встретятся в одном файле.
А вообще VAI правильно заметил: Код в студию! Ну и ошибки компилятора тоже.


Для каждого с-файла есть свой h-файл, а еще есть и файл GlobalVars.h, где перечислены все extern-ы и который incude-ится где только можно. Да и сам проект собирается и работает как в IAR'е, так и в VC6.0 - это к вопросу о сишном синтаксисе. Проблемы возникают лишь при включении оптимизации(!) . Версия IAR'а - 3.40
Go to the top of the page
 
+Quote Post
shasik
сообщение Sep 4 2006, 20:40
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Причиной оказались "#pragma inline=forced". Когда включена оптимизация inline функция работает только в пределах одного файла и не вылазит в другой. Могли бы, черти, в help-е отметить этот момент.
Go to the top of the page
 
+Quote Post
VAI
сообщение Sep 5 2006, 11:19
Сообщение #6


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

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



> Могли бы, черти, в help-е отметить этот момент.
это не ИАРовские недоработки, а свойства языка.


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
_Bill
сообщение Sep 13 2006, 07:15
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(shasik @ Sep 4 2006, 23:40) *
Причиной оказались "#pragma inline=forced". Когда включена оптимизация inline функция работает только в пределах одного файла и не вылазит в другой. Могли бы, черти, в help-е отметить этот момент.

Ну, так надо было эту функцию в заголовочный файл вынести.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 10:32
Рейтинг@Mail.ru


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