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

 
 
> Как в 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
 
Start new topic
Ответов
rezident
сообщение Sep 2 2006, 21:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #4


Местный
***

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



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


Местный
***

Группа: Участник
Сообщений: 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 Текстовая версия Сейчас: 28th July 2025 - 14:49
Рейтинг@Mail.ru


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