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

 
 
 
Reply to this topicStart new topic
> Компилятор RealView пакета MDK3.40, обработка external symbol
sonycman
сообщение Dec 30 2008, 00:32
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



В проекте uVision есть асмовый файл (startup.s) и несколько сишных .cpp.
Потребовалось передать в таблицу векторов в асм адрес функции, определённой в си.

Ну воткнул в асм IMPORT label_name перед указанием метки. Вроде всё правильно.
Все файлы компилируются, но линкер безостановочно ругается на undefined symbol "label_name" 07.gif
Твою мать. Весь вечер убил на ковыряние - оказалось, виной всему было расширение файла с функцией - .cpp. Переименование в .c решает проблему (но добавляет другие smile.gif)
Или ещё можно выкрутиться заключеним функции в обёртку extern "C" {}...

Но почему линкеру необходимы именно "чистые" си, а не плюсы для поиска внешних меток?
Что за причуда? wacko.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 30 2008, 15:08
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Хм, компилирую свой проект с использованием MicroLib, проект простой, имеет всего два небольших класса.
Однако сейчас на этапе линковки стала вылетать такая ошибка:
Код
.\obj\blinky.axf: Error: L6218E: Undefined symbol __cpp_initialize__aeabi_ (referred from anon$$obj.o).

При снятии галочки с Use MicroLib в свойствах проекта - ошибка пропадает, всё собирается нормально.

Никто не сталкивался с подобным? Так ли актуальна эта microlib?

ЗЫ: вроде разобрался - это вызов библиотечного обработчика конструкторов объектов С++.
А у микролиб с этим проблемы - если есть глобальный объект с конструктором, то такая ошибка обеспечена.
Если создаём локальный объект - всё нормально 05.gif
Чёрт, а стандартная либа жрёт на 500 байт больше - это пока. Но зато никаких ограничений smile.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 1 2009, 20:22
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(sonycman @ Dec 30 2008, 17:08) *
Никто не сталкивался с подобным? Так ли актуальна эта microlib?

Она актуальна для мелких чипов (8-16K Flash). Если у Вас более толстый чип, можно ее не использовать.

По поводу актуальности для мелких чипов, вы уже сами ответили smile.gif.
К примеру, голый main() с microlib компилируется в ~300байт кода, без нее - ~900.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 1 2009, 21:27
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Понятно, спасибо smile.gif

В соседней теме я высказался по поводу отсутствия хидеров с определениями регистров периферии для семейства STM32.
Поэтому приходится частично юзать библиотеку.

Но у неё, похоже, проблемы с С++ - чего стоит переопределение bool и несколько других предупреждений при компиляции - без правки исходника не обойтись 05.gif
Эта версия шла в комплекте с MDK3.40.

Надо глянуть на сайте ST, может есть исправленная версия...

ЗЫ: точно - скачал с их сайта обновлённую версию библиотеки - добавлены определения всех битов!
Но заточку под plain C так и не убирали - на плюсах приходится дорабатывать напильником пару строчек sad.gif
Go to the top of the page
 
+Quote Post

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

 


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


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